UISearchBar: изменение цвета фона поля ввода - PullRequest
7 голосов
/ 29 августа 2011

Я пытаюсь изменить цвет фона поля ввода UISearchBar. Это округленное представление, где вы вводите текст для поиска, по умолчанию цвет белый. Я хотел бы изменить его на серый

Я пытался:

for (UIView *subView in searchBar.subviews) {
    if ([subView isKindOfClass:NSClassFromString(@"UITextField")]) {
        UITextField *textField = (UITextField *)subView;
        [textField setBackgroundColor:[UIColor grayColor]];
    }

Но это не работает: (

Я также пытался вставить вид изображения в TextField, но кажется, что округленный вид отделен от TextField. Итак, какие-нибудь подсказки?

Ответы [ 5 ]

10 голосов
/ 08 мая 2014

=)

for (UIView *subView in _searchBar.subviews) {
    for(id field in subView.subviews){
        if ([field isKindOfClass:[UITextField class]]) {
            UITextField *textField = (UITextField *)field;
            [textField setBackgroundColor:[UIColor grayColor]];
        }
    }
}
7 голосов
/ 12 октября 2012

Посмотрите на функцию:

[searchBar setSearchFieldBackgroundImage:[UIImage imageNamed:@"search_bar"] forState:UIControlStateNormal];
3 голосов
/ 04 июня 2017

Решение в Swift 3:

if let txfSearchField = searchController.searchBar.value(forKey: "_searchField") as? UITextField {
        txfSearchField.borderStyle = .none
        txfSearchField.backgroundColor = .lightGray
}
3 голосов
/ 10 мая 2016

В Swift 2 и iOS 9 вы можете позвонить:

UITextField.appearanceWhenContainedInInstancesOfClasses([UISearchBar.self]).backgroundColor = UIColor.darkGrey()

Swift 3:

UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]).backgroundColor = UIColor.darkGrey()
0 голосов
/ 08 ноября 2018

Возьмите расширение, работающее в swift4:

extension UISearchBar {

    var input : UITextField? {

        return findInputInSubviews(of: self)
    }

    func findInputInSubviews(of view: UIView) -> UITextField? {
        guard view.subviews.count > 0 else { return nil }
        for v in view.subviews {
            if v.isKind(of: UITextField.self) {
                return v as? UITextField
            }
            let sv = findInputInSubviews(of: v)
            if sv != nil { return sv }
        }
        return nil
    }
}

Использование:

searchBar?.input?.layer.borderColor = color.cgColor
...