4

我很想在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];

但是,我还想自定义 searchBar 的 tintColor:

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

那条线不起作用。我想我可能引用了错误的 searchBar ....你能指出我正确的方向吗?

4

4 回答 4

3

我刚刚遇到了同样的问题。更改导航栏颜色很容易。改变 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:@"> "];
}
于 2011-04-14T13:33:10.453 回答
1

我没有更改颜色,而是将图像添加到背景:

[mysearchBar setBackgroundImage:[UIImage imageNamed:@"<#Your image name#>"]];
于 2013-03-14T20:00:08.343 回答
1

您现在可以使用 UISearchBar 外观代理执行此操作:

UISearchBar* addressBookSearchBar = [UISearchBar appearanceWhenContainedIn:[ABPeoplePickerNavigationController class], nil];
addressBookSearchBar.tintColor = [UIColor blackColor];
于 2013-09-11T19:11:18.087 回答
1

对于 iOS7+,最简单的方法是操纵外观代理UISearchBar

[[UISearchBar appearance] setBarTintColor:[UIColor blackColor]];
于 2014-07-03T21:16:01.933 回答