Изменение оттенкаЦвет UISearchBar внутри ABPeoplePickerNavigationController
Я пытаюсь настроить цвета немного в ABPeoplePickerNavigationController
ниже мой полный код:
ABPeoplePickerNavigationController *objPeoplePicker = [[ABPeoplePickerNavigationController alloc] init];
[objPeoplePicker setPeoplePickerDelegate:self];
objPeoplePicker.topViewController.navigationController.navigationBar.tintColor = [UIColor colorWithRed:0.294 green:0.278 blue:0.247 alpha:1.0];
objPeoplePicker.topViewController.searchDisplayController.searchBar.tintColor = [UIColor colorWithRed:0.294 green:0.278 blue:0.247 alpha:1.0];
[self presentModalViewController:objPeoplePicker animated:YES];
Настраивая NavigationBar tintColor, эта строка работает:
objPeoplePicker.topViewController.navigationController.navigationBar.tintColor = [UIColor colorWithRed:0.294 green:0.278 blue:0.247 alpha:1.0];
Но я также хотел бы настроить tintColor панели поиска:
objPeoplePicker.topViewController.searchDisplayController.searchBar.tintColor = [UIColor colorWithRed:0.294 green:0.278 blue:0.247 alpha:1.0];
Эта строка не работает. Я думаю, что я могу ссылаться на неправильную строку поиска. Можете ли вы указать мне правильное направление?
4 ответа
Я просто столкнулся с той же проблемой. Изменить цвет navBar легко. Изменение цвета UISearchBar, однако, не так сильно. Сначала я проверил
if( picker.searchDisplayController == nil )
NSLog(@"searchDisplayController is nil");
if( picker.topViewController.searchDisplayController == nil )
NSLog(@"topViewController.searchDisplayController is nil");
Оба раза searchDisplayController был равен нулю. В итоге я обошел иерархию представления, чтобы найти представление UISearchBar. Там, безусловно, есть один прямо. Так что это мой последний код. Если у кого-то есть лучшее решение, я бы с удовольствием его услышал.
static BOOL foundSearchBar = NO;
- (void)findSearchBar:(UIView*)parent mark:(NSString*)mark {
for( UIView* v in [parent subviews] ) {
if( foundSearchBar ) return;
NSLog(@"%@%@",mark,NSStringFromClass([v class]));
if( [v isKindOfClass:[UISearchBar class]] ) {
[(UISearchBar*)v setTintColor:[UIColor blackColor]];
foundSearchBar = YES;
break;
}
[self findSearchBar:v mark:[mark stringByAppendingString:@"> "]];
}
}
- (void)pickPerson:(BOOL)animated {
foundSearchBar = NO;
ABPeoplePickerNavigationController *picker = [[ABPeoplePickerNavigationController alloc] init];
[[picker navigationBar] setTintColor:[UIColor blackColor]];
picker.peoplePickerDelegate = self;
picker.displayedProperties = [NSArray arrayWithObjects:
[NSNumber numberWithInt:kABPersonEmailProperty],
nil];
[self presentModalViewController:picker animated:animated];
[picker release];
[self findSearchBar:[picker view] mark:@"> "];
}
Вместо изменения цвета я добавляю изображение на фон:
[mysearchBar setBackgroundImage:[UIImage imageNamed:@"<#Your image name#>"]];
Для iOS7+ самый простой способ - манипулирование внешним прокси UISearchBar
:
[[UISearchBar appearance] setBarTintColor:[UIColor blackColor]];
Вы можете сделать это, используя внешний вид прокси UISearchBar:
UISearchBar* addressBookSearchBar = [UISearchBar appearanceWhenContainedIn:[ABPeoplePickerNavigationController class], nil];
addressBookSearchBar.tintColor = [UIColor blackColor];