Опитвам се да променя цвета наABPeoplePickerNavigationController navbar към цветовете на моето приложение. Въпреки това не настъпват промени. Дори когато се опитам да го скрия или поне да променя цвета на нюанса на лентата на състоянието, нищо не се случва. Защо?
- (ABPeoplePickerNavigationController *)peoplePicker
{
if(!_peoplePicker){
_peoplePicker = [[ABPeoplePickerNavigationController alloc]init];
_peoplePicker.peoplePickerDelegate = self;
_peoplePicker.navigationBar.hidden = YES;
}
return _peoplePicker;
}
Мързелив мигновено моя навигационен контролер и други методи повиквания като отхвърли контролер на изглед и т.н. работят добре.
EDIT: Това е моят настоящ код (за баунти), Не се случват промени в цвета така:
- (ABPeoplePickerNavigationController *)peoplePicker
{
if(!_peoplePicker){
_peoplePicker = [[ABPeoplePickerNavigationController alloc]init];
_peoplePicker.peoplePickerDelegate = self;
_peoplePicker.navigationBar.tintColor = [UIColor blackColor];
}
return _peoplePicker;
}
- (IBAction)addressBookButtonClicked:(id)sender {
[self presentViewController:self.peoplePicker animated:YES completion:nil];
}
Това не работи ли вече на iOS8?
Отговори:
7 за отговор № 1Всъщност, благодарение на коментара по-горе, разбрах, че прокси сървърът трябва да работи така:
[[UINavigationBar appearance] setTintColor:[UIColor whiteColor]];
Просто го поставете в метода viewDidLoad наВижте контролер, от който подбуждате ABPeoplePickerView. Това ще работи и за MFMailerView. Моят код, който използвам, за да стилизирам правилно баровете си, е:
[[UINavigationBar appearance] setTintColor:[UIColor whiteColor]];
NSDictionary *attributes = [NSDictionary dictionaryWithObjectsAndKeys:[UIFont
fontWithName:@"Helvetica Neue" size:12], NSFontAttributeName,
[UIColor whiteColor], NSForegroundColorAttributeName, nil];
[[UINavigationBar appearance] setTitleTextAttributes:attributes];
2 за отговор № 2
ABPeoplePickerNavigationController *picker = [[ABPeoplePickerNavigationController alloc] init];
[[UIBarButtonItem appearanceWhenContainedIn:[ABPeoplePickerNavigationController class], nil] setTintColor:[UIColor whiteColor]];
[[UINavigationBar appearanceWhenContainedIn:[ABPeoplePickerNavigationController class], nil] setTintColor:[UIColor whiteColor]];
[[UINavigationBar appearanceWhenContainedIn:[ABPeoplePickerNavigationController class], nil] setBarTintColor:[UIColor redColor]];
[picker.navigationController.navigationBar setTranslucent:NO];
Обаждам се на тези методи, преди да представя инструмента за избор на човек, дори не в viewdidload.
1 за отговор № 3
цветният въпрос: Навигационният бар може да не бъде зареден в точката, когато се опитвате да получите достъп до него. Опитали ли сте да зададете свойствата на цветовете след представянето на ABPeoplePickerNavigationController.
Проблемът за скриване: Обикновено скривате NavigationBar, като се обаждате:
- (void)setNavigationBarHidden:(BOOL)hidden animated:(BOOL)animated;
на UINavigationController, във вашия случай ABPeoplePickerNavigationController.
Наздраве, Фабиан
1 за отговор № 4
Използвате променлива на инстанция (iVar) _peoplePicker
, която очевидно принадлежи на имот peoplePicker
, Освен това имате метод peoplePicker
който връща обект от клас ABPeoplePickerNavigationController *
.
Във вашия IBAction
addressBookButtonClicked:
изпълнявате инструкцията
[self presentViewController:self.peoplePicker animated:YES completion:nil];
Това означава, че се обаждате на вашия метод peoplePicker
, която проверява iVar _peoplePicker
и го задава (например цвета на нюанса), ако има a nil
стойност.
Но тъй като използвате iVar директно, т.е. _peoplePicker
вместо self.peoplePicker
, не използвате метода на настройка, а просто задание.
Това означава запазване на броя на UIColor
обект, който създавате в [UIColor blackColor]
със запазен брой 1 няма да бъде увеличен от инструкцията _peoplePicker.navigationBar.tintColor = [UIColor blackColor];
но ще бъде пуснат в пул с автоматично освобождаване, когато бъде върнат от return _peoplePicker;
, Но autoreleasepool ще бъде източен, когато приложението се върне към основния цикъл на събитията и UIColor
обект ще бъде освободен.
Затова предлагам да замените всички задания на _peoplePicker
по задания на self.peoplePicker
, Тогава използвате метода setter, който ще увеличи броя на задържаните и вашите UIColor
обект ще оцелее.