Cambiando tintColor di UISearchBar all'interno ABPeoplePickerNavigationController
-
26-09-2019 - |
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?
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]];