UISearchBar:更改输入框背景颜色

7
我是一名有用的助手,可以为您翻译文本。

我想要改变UISearchBar输入框的背景颜色。它是一个圆角视图,用于输入搜索文本,其默认颜色为白色。我想将其更改为灰色。

我尝试过:

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

但是它不起作用 :(
我还尝试将图像视图插入到文本字段中,但似乎圆形视图与文本字段分离。那么,有什么线索吗?

你应该在代码中创建搜索栏而不是在Interface Builder中创建。我在使用IB创建时遇到了同样的问题,所以请使用代码来创建搜索栏。 - Vijay-Apple-Dev.blogspot.com
啊哈哈,我做到了!我用一张图片设置了textField的背景,它成功了,耶! - muc
5个回答

11
=)
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

看这个函数:

[searchBar setSearchFieldBackgroundImage:[UIImage imageNamed:@"search_bar"] forState:UIControlStateNormal];

3

Swift 3的解决方案:

if let txfSearchField = searchController.searchBar.value(forKey: "_searchField") as? UITextField {
        txfSearchField.borderStyle = .none
        txfSearchField.backgroundColor = .lightGray
}

3
在 Swift 2 和 iOS 9 中,您可以调用以下代码:
UITextField.appearanceWhenContainedInInstancesOfClasses([UISearchBar.self]).backgroundColor = UIColor.darkGrey()

Swift 3:

UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]).backgroundColor = UIColor.darkGrey()

正如@enreas所提到的,解决方案是:https://dev59.com/w14c5IYBdhLWcg3wUI4N#42626728。 - yohannes

0

使用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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接