Domanda

Io sono tyring di personalizzare i colori un po 'in un ABPeoplePickerNavigationController sotto è il mio codice completo:

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];

Personalizzazione della NavigationBar tintColor, questa linea funziona:

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

Ma, mi piacerebbe anche come personalizzare il tintColor del Searchbar:

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

Quella linea non funziona. Credo che mi si fa riferimento alla Searchbar sbagliato .... mi puoi puntare nella direzione giusta?

È stato utile?

Soluzione

Ho appena incontrato lo stesso problema. Cambiare il colore navBar è facile. Cambiare il colore UISearchBar tuttavia non tanto. In primo luogo quello che ho fatto è stato quello di verificare

if( picker.searchDisplayController == nil ) 
  NSLog(@"searchDisplayController is nil");
if( picker.topViewController.searchDisplayController == nil ) 
  NSLog(@"topViewController.searchDisplayController is nil");

Entrambe le volte il searchDisplayController era pari a zero. Quello che ho finito per fare era attraversare la gerarchia immagine per trovare la vista UISearchBar. V'è certamente uno là a destra. Quindi questo è il mio codice finale. Se qualcuno ha una soluzione migliore mi piacerebbe sentirlo.

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:@"> "];
}

Altri suggerimenti

Invece di cambiare il colore aggiungo un'immagine per lo sfondo:

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

È possibile farlo utilizzando il proxy aspetto UISearchBar ora:

UISearchBar* addressBookSearchBar = [UISearchBar appearanceWhenContainedIn:[ABPeoplePickerNavigationController class], nil];
addressBookSearchBar.tintColor = [UIColor blackColor];

Per iOS7 + il modo più semplice sta manipolando il proxy aspetto del UISearchBar:

[[UISearchBar appearance] setBarTintColor:[UIColor blackColor]];
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top