Изменение оттенкаЦвет UISearchBar внутри ABPeoplePickerNavigationController - PullRequest
4 голосов
/ 01 сентября 2010

Я пытаюсь немного настроить цвета в 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];

Но я также хотел бы настроить оттенок цвета панели поиска:

objPeoplePicker.topViewController.searchDisplayController.searchBar.tintColor = [UIColor colorWithRed:0.294 green:0.278 blue:0.247 alpha:1.0];

Эта строка не работает. Я думаю, что я могу ссылаться на неправильную панель поиска .... Вы можете указать мне правильное направление?

Ответы [ 4 ]

3 голосов
/ 14 апреля 2011

Я просто столкнулся с той же проблемой. Изменить цвет 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:@"> "];
}
1 голос
/ 04 июля 2014

Для iOS7 + самый простой способ - манипулировать внешним прокси UISearchBar:

[[UISearchBar appearance] setBarTintColor:[UIColor blackColor]];
1 голос
/ 11 сентября 2013

Вы можете сделать это, используя внешний прокси-сервер UISearchBar:

UISearchBar* addressBookSearchBar = [UISearchBar appearanceWhenContainedIn:[ABPeoplePickerNavigationController class], nil];
addressBookSearchBar.tintColor = [UIColor blackColor];
1 голос
/ 15 марта 2013

Вместо изменения цвета я добавляю изображение на фон:

[mysearchBar setBackgroundImage:[UIImage imageNamed:@"<#Your image name#>"]];
...