UISearchBAR scopeBar tintColor - PullRequest
       9

UISearchBAR scopeBar tintColor

15 голосов
/ 02 ноября 2009

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

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

Ура, Нил

Ответы [ 8 ]

9 голосов
/ 18 сентября 2013

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

[[UISegmentedControl appearanceWhenContainedIn:[UISearchBar class], nil] setTintColor:[UIColor whiteColor]];
7 голосов
/ 19 ноября 2009

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

Из документов: 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 и надеяться, что они исправят это в будущем выпуске.

4 голосов
/ 20 июля 2010

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

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

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

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

1 голос
/ 21 ноября 2016

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

Код ниже находится на C # (Xamarin)

SearchController.SearchBar.TintColor = UIColor.Green;
0 голосов
/ 10 июня 2018

Это решение находится в Swift, может быть адаптировано к объективу-c. Вы можете найти сегментированный вид управления, используя функцию ниже

func findSegmentedControl(view : UIView) -> UIView? {
    for v in view.subviews {
        if v is UISegmentedControl {
            print(v)
            return v
        } else {
            if let found = findSegmentedControl(view : v) {
                return found
            }
        }
    }
    return nil
}

и затем установите оттенок цвета вида. вызов этой функции будет выглядеть так:

if let segmentedView = findSegmentedControl(view: searchController.searchBar) {                
            segmentedView.tintColor = UIColor.white
        }
0 голосов
/ 26 февраля 2015

enter image description here

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

0 голосов
/ 02 января 2011

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

0 голосов
/ 09 февраля 2010

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

Что я в итоге сделал, так это изменил строку поиска tintColor ... ДО перехода в режим поиска, после чего я делаю его цветом по умолчанию для соответствия панели области действия. Затем, при отмене поиска, я изменяю его обратно.

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

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

...