Как изменить цвет панели поиска?
я реализовал панель поиска, и я хочу изменить цвет панели поиска. Как я могу это сделать?
Я пробовал с:
self.mySearchBar.backgroundColor = [UIColor redColor];
но без успеха.
обновление (решена):
мне пришлось удалить цвет фона по умолчанию, прежде чем я определил цвет фона со следующим кодом.
for (UIView *subview in mySearchBar.subviews) {
if ([subview isKindOfClass:NSClassFromString(@"UISearchBarBackground")]) {
[subview removeFromSuperview];
break;
}
}
... таким образом, код будет следующим:
for (UIView *subview in mySearchBar.subviews) {
if ([subview isKindOfClass:NSClassFromString(@"UISearchBarBackground")]) {
[subview removeFromSuperview];
break;
}
}
self.mySearchBar.backgroundColor = [UIColor redColor];
8 ответов
self.mySearchBar.backgroundColor = [UIColor redColor];
ничего не сделают.
но
self.mySearchBar.tintColor = [UIColor redColor];
будет!
self.mySearchBar.backgroundVolor = [UIColor redColor];
" Volor "или" Color
self.mySearchBar.backgroundColor = [UIColor redColor];
также если вы хотите подкрасить это:
согласно документации : https://developer.apple.com/iphone/library/documentation/UIKit/Reference/UISearchBar_Class/Reference/Reference.html, существует свойство tintColor в классе UISearchBar.
в Примере TableSearch:https://developer.apple.com/library/ios/#samplecode/TableSearch/ строка поиска определена и загружена в MainView.xib. Если вы хотите изменить его цвет или стиль, просто сделайте это в xib, и он будет загружен в приложение.
но единственный реальный способ изменить цвет фона-переопределить его, посмотрите на ответ из следующего вопроса
uisearchbar очистить цвет фона или установить фоновое изображение [iPhone sdk]
Я не уверен, что он изменился с iOS7, но кажется, что строка поиска в контроллере дисплея поиска требует дополнительного цикла для правильного удаления представления UISearchBarBackground.
Я создал рекурсивный метод для правильной очистки строки поиска.
- (void) removeUISearchBarBackgroundInViewHierarchy:(UIView *)view
{
for (UIView *subview in [view subviews]) {
if ([subview isKindOfClass:NSClassFromString(@"UISearchBarBackground")]) {
[subview removeFromSuperview];
break; //To avoid an extra loop as there is only one UISearchBarBackground
} else {
[self removeUISearchBarBackgroundInViewHierarchy:subview];
}
}
}
Вы можете просто отправить строку поиска в метод и изменить цвет после этого, немного как предлагаемые ответы выше.
[self removeUISearchBarBackgroundInViewHierarchy:self.searchDisplayController.searchBar];
self.searchDisplayController.searchBar.backgroundColor = yourUIColor;
попробуйте этот код, он отлично работает для меня.
for( UIView* v in [parent subviews] ) {
if( [v isKindOfClass:[UISearchBar class]] ) {
[(UISearchBar*)v setTintColor:[UIColor blackColor]];
}
Если у вас есть проблемы с верхней и нижней строками, попробуйте удалить UISearchBarBackground:
self.searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, self.tableView.frame.size.width, 50)];
for (UIView *subview in self.searchBar.subviews) {
if ([subview isKindOfClass:NSClassFromString(@"UISearchBarBackground")]) {
[subview removeFromSuperview];
break;
}
for (UIView *subsubview in subview.subviews) {
if ([subsubview isKindOfClass:NSClassFromString(@"UISearchBarBackground")]) {
[subsubview removeFromSuperview];
break;
}
}
}
self.searchBar.barTintColor = [UIColor redColor];
self.searchBar.backgroundColor = [UIColor redColor];