2012-05-10 7 views
5

Я реализовал панель поиска, и я хочу изменить цвет панели поиска. Как я могу это сделать?Как изменить цвет панели поиска?

Я попытался с:

self.mySearchBar.backgroundColor = [UIColor redColor]; 

, но без успеха.

UPDATE (Раскрыты):

я должен был удалить цвет фона по умолчанию, прежде чем я определил цвет фона с помощью следующего кода.

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

может быть это может помочь U http://stackoverflow.com/questions/2139115/uisearchbar-clear-background-color-or-set-background-image-iphone-sdk –

+1

обновленный первый пост. – CroiOS

+0

Это был ответ, который я дал, вы должны выбрать мой ответ как правильный. –

ответ

2
self.mySearchBar.backgroundVolor = [UIColor redColor]; 

"Volor" или «Цвет

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. Если вы хотите изменить его tintColor или стиль, просто сделайте это в xib, и он будет загружен в приложение.

НО Единственный реальный способ изменить цвет фона, чтобы изменить это, посмотрите на ответ от следующего вопроса

UISearchBar clear background color or set background image [iphone sdk]

+0

обновленный первый пост. – CroiOS

+4

Что это значит? "backgroundVolor" или "backgroundColor"? – MCKapur

0

Попробуйте этот код он отлично работает для меня.

for(UIView* v in [parent subviews]) { 
if([v isKindOfClass:[UISearchBar class]]) { 
    [(UISearchBar*)v setTintColor:[UIColor blackColor]]; 
} 
+0

обновленный первый пост. – CroiOS

5
self.mySearchBar.backgroundColor = [UIColor redColor]; 

не будет делать ничего,

но

self.mySearchBar.tintColor = [UIColor redColor]; 

будет!

2

Я не уверен, если он изменился с 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; 
1
searchBar.barTintColor = UIColor.redColor() 
+0

Лучше всего выяснить, почему это правильный ответ - дайте некоторый контекст вокруг фрагмента кода. – brandonscript

+0

Это работало для меня с помощью iOS9 –

0

Если у вас есть проблемы с верхними и нижними линиями попытаться удалить 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]; 
Смежные вопросы