связь между добавлением imageView и navBar tintColor? - PullRequest
0 голосов
/ 22 августа 2011

Это действительно странно, и я не могу объяснить это. Мне потребовались часы, чтобы осознать, что только когда я добавляю UIImageView в качестве subView в мой self.view в viewController viewDidLoad, я могу установить цвет оттенка моей панели навигации. Если я добавлю UIImageView в метод init - цвет оттенка ничего не делает для моей навигационной панели.

Итак ...

В этом случае моя навигационная панель получает цвет оттенка:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
    // Custom initialization
}
return self;
}


- (void)viewDidLoad
{
[super viewDidLoad];

//NAV BAR COLOR  
self.navigationController.navigationBar.tintColor = [UIColor blueColor];

//ADDING BACKGROUND IMAGE 
UIImageView *imgView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
imgView.image = [UIImage imageNamed:@"aaa.png"];
[self.view addSubview: imgView];
[self.view sendSubviewToBack:imgView];

}

Здесь это не так (просто перенес добавление изображения в метод init):

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
  //ADDING BACKGROUND IMAGE 
UIImageView *imgView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
imgView.image = [UIImage imageNamed:@"aaa.png"];
[self.view addSubview: imgView];
[self.view sendSubviewToBack:imgView];    }
return self;
}


- (void)viewDidLoad
{
[super viewDidLoad];

//NAV BAR COLOR  
self.navigationController.navigationBar.tintColor = [UIColor blueColor];

}

Вот как я называю это представление:

Login *loginViewController = [[Login alloc] initWithNibName:nil bundle:nil];
UINavigationController *navCntrl1 = [[UINavigationController alloc] initWithRootViewController:loginViewController];
[self presentModalViewController:navCntrl1 animated:YES];

Есть идеи, почему? Я так озадачен ... спасибо !!

1 Ответ

1 голос
/ 22 августа 2011

Это не имеет ничего общего с вашим изображением, это связано с тем, как создаются UINavigationControllers.

Вот ваш код (с некоторыми добавленными комментариями):

// Create the view controller
Login *loginViewController = [[Login alloc] initWithNibName:nil bundle:nil];

// Create a navigation controller and add it
UINavigationController *navCntrl1 = [[UINavigationController alloc] initWithRootViewController:loginViewController];

viewDidLoad - этоВызов в первый раз, когда пользователь должен знать о представлении вашего контроллера представления.Если ваш метод viewDidLoad хочет отредактировать функцию контроллера навигации, тогда _your view контроллер должен быть добавлен в контроллер навигации перед вызовом viewDidLoad`.

В вашем первом примере, viewDidLoad был вызван, когдаВы добавили свой контроллер вида в контроллер навигации (вторая строка выше).

Во втором примере viewDidLoad был вызван, когда вы сказали self.view в методе initWithNibNamed:bundle:.Важно, что это до того, как ваш контроллер представления узнает, что он будет добавлен в контроллер навигации .Поэтому, когда вы говорите self.navigationController, он не будет знать, о каком контроллере навигации вы говорите.Он не может установить оттенок чего-то, о чем еще не знает!

В первом примере viewDidLoad называется после , когда вы добавили свой контроллер вида в контроллер навигациипоэтому, когда вы говорите self.navigationController, он знает, о каком контроллере навигации вы говорите, и может соответствующим образом установить оттенок.

Чтобы проверить это самостоятельно, введите NSLog(@"%@", self.navigationController); в свой метод viewDidLoad - держу пари, он выводит nil для второго примера;)


К вашему сведению:

В любом случае вы всегда должны делать первый пример - он будет создавать изображение только тогда, когда это необходимои позволит вам выгрузить изображение в случае нехватки памяти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...