Как изменить цвет панели поиска?

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

Я пробовал с:

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.barTintColor = [UIColor redColor];

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;

searchBar.barTintColor =  UIColor.redColor()

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

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

Я должен был установить UISearchBar в searchBarStyle до .default, иначе ничего не работает.