UISearchBar:更改输入字段的背景颜色

Posted

技术标签:

【中文标题】UISearchBar:更改输入字段的背景颜色【英文标题】:UISearchBar: changing background color of input field 【发布时间】:2011-11-05 22:44:18 【问题描述】:

我正在尝试更改 UISearchBar 输入字段的背景颜色。这是您输入要搜索的文本的圆形视图,默认颜色为白色。我想把它改成灰色

我试过了:

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

但它不起作用:(

我还尝试向 TextField 插入图像视图,但圆形视图似乎与 TextField 是分开的。那么,有什么线索吗?

【问题讨论】:

你应该在不在 interfacebuilder 中的代码中创建搜索栏。我在从 IB 创建时遇到了同样的问题。所以使用代码创建搜索栏 感谢您的回复。我会试试的 啊哈哈,我做到了!我用图像设置了 textField.background,它起作用了,耶! 【参考方案1】:

=)

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

【讨论】:

【参考方案2】:

看功能:

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

【讨论】:

【参考方案3】:

在 Swift 2 和 ios 9 中你可以调用:

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

斯威夫特 3:

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

【讨论】:

正如@enreas 提到的,解决方案是:***.com/a/42626728/2229062【参考方案4】:

Swift 3 中的解决方案:

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

【讨论】:

【参考方案5】:

以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

【讨论】:

以上是关于UISearchBar:更改输入字段的背景颜色的主要内容,如果未能解决你的问题,请参考以下文章

如何在iOS上更改UISearchBar组件的内部背景颜色

如何在 iOS7 中更改 UISearchBar 的背景颜色

更改 UISearchBar 搜索字段背景

文本字段背景颜色不变

更改 UISearchBar 中的 UITextField 高度 - Swift 3

UISearchBar:清除背景颜色或设置背景图像[重复]