UISearchBAR scopeBar tintColor

Кто-нибудь сумел раскрасить область видимости области видимости UISearchBar, у нее есть свойство tintColor, но установка этого параметра не влияет на прикрепленный параметр UISegmentedControl. Ive получил ручку на панели, чтобы подкрасить ее, но, похоже, не работает, т.е.:

for (id subview in searchBar.subviews){
  if([subview isMemberOfClass:[UISegmentedControl class]]){
     UISegmentedControl *scopeBar=(UISegmentedControl *) subview;
    scopeBar.tintColor=UIColorFromRGB(0x990066);
 }
}

Приветствия, Нил

Ответы

Ответ 1

Это интересно, оказывается, область видимости - это несколько настраиваемый сегментированный элемент управления.

В документах: UISegmentedControl использует это свойство только в том случае, если стиль сегментарного элемента управления - UISegmentedControlStyleBar.

Теперь сегментированный элемент рамки области видимости выглядит как UISegmentedControlStyleBar, но нет, он имеет некоторый недокументированный стиль:

NSLog(@"scope bar style is %d", scopeBar.segmentedControlStyle);
> scope bar style is 7

Вы можете попробовать это, которое действительно устанавливает оттенок, но выглядит как осел:

[scopeBar setSegmentedControlStyle:UISegmentedControlStyleBar];
[scopeBar setTintColor: UIColorFromRGB(0x990066)];
> scope bar style is 2

Внутри есть некоторые переменные экземпляра, влияющие на это: _segementedControlFlags.style и _barStyle, но вы не можете их взломать, если вы не обойдете санкционированный API.

Лучший способ действий - поднять его с Apple и надеяться, что они включают исправление в будущую версию.

Ответ 2

Вышеуказанные подходы не работали для меня, и я закончил использование метода внешнего вида iOS.

[[UISegmentedControl appearanceWhenContainedIn:[UISearchBar class], nil] setTintColor:[UIColor whiteColor]];

Ответ 3

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

scopeBar.segmentedControlStyle = UISegmentedControlStyleBar; //required for color change
for (id subview in self.searchDisplayController.searchBar.subviews )
{
    if([subview isMemberOfClass:[UISegmentedControl class]])
    {
        UISegmentedControl *scopeBar=(UISegmentedControl *) subview;
        scopeBar.tintColor =  [UIColor blackColor];         
    }
}

Если вы используете белый квадрат вокруг ваших кнопок, вы можете изменить его цвет через конструктор интерфейса.

Я бы не сказал, что это выглядит "как задница", как это делают другие, но это тоже не идеальный вариант.

Ответ 4

Просто измените цвет оттенка ScopeBar следующим образом:

Нижеприведенный код находится в С# (Xamarin)

SearchController.SearchBar.TintColor = UIColor.Green;

Ответ 5

Я не смог надежно установить оттенок для панели видимости.

То, что я закончил, это изменение строки поиска tintColor... UNTIL переход в режим поиска, после чего я делаю его по умолчанию, чтобы соответствовать строке области. Затем, отменяя поиск, я меняю его.

Одно пятно, которое, кажется, отсутствует здесь, - это переход, который возникает, когда соответствующий tableView используется, заставляя панель поиска потерять статус первого ответчика. В этом случае цвет не меняется. Причина. Я основываю это изменение цвета на нажатии кнопки отмены строки поиска.

Реакция на колене: searchBarCancelButtonClicked: следует вызвать (в котором мы изменим оттенок)... но это не может быть прав, потому что Cancel не был нажат. Мне действительно нужен тип обнаружения "Поиск сделан". Может быть, просто следите за первым ответчиком и смотрите, когда UISearchBar перемещается в и из этого состояния?

Ответ 6

Еще одно решение для этой проблемы (и менее сложное) - вы можете добавить полупрозрачный UIImageView поверх панели поиска и панели видимости и изменить цвет фона UIImageView на нужный оттенок.

Ответ 7

enter image description here

Измените цвет оттенка для изменения цвета рамки. Примечание. BarTintColor отличается - это изменит цвет панели поиска.