【问题标题】:Unable to change background color of TF in search bar implemented using UISearchController无法在使用 UISearchController 实现的搜索栏中更改 TF 的背景颜色
【发布时间】:2018-04-17 08:09:20
【问题描述】:

如何更改仅文本字段的背景颜色? (下图中为红色)

如果使用下面的代码将背景颜色设置为白色,则顶部填充不足 searchController.searchBar.backgroundColor = UIColor.white

【问题讨论】:

    标签: ios swift uisearchcontroller searchbar


    【解决方案1】:

    请尝试使用此方法更改搜索栏中文本字段的背景颜色。

    我们有很多方法可以做到这一点:

    第一种方式:

    extension UISearchBar {
    
        private func getViewElement<T>(type: T.Type) -> T? {
    
            let svs = subviews.flatMap { $0.subviews }
            guard let element = (svs.filter { $0 is T }).first as? T else { return nil }
            return element
        }
    
        func setTextFieldColor(color: UIColor) {
    
            if let textField = getViewElement(type: UITextField.self) {
                switch searchBarStyle {
                    case .minimal:
                        textField.layer.backgroundColor = color.cgColor
                        textField.layer.cornerRadius = 6
    
                    case .prominent, .default:
                        textField.backgroundColor = color
                }
            }
        }
    }
    

    如何使用

    searchBar.setTextFieldColor(color: UIColor.green.withAlphaComponent(0.3))
    

    第二种方式:你可以像这样从搜索栏获取文本字段并直接更改颜色:

    在 Swift 中

    for subView: UIView? in searchBar.subviews {
        for field: Any? in subView?.subviews ?? [Any?]() {
            if (field is UITextField) {
                var textField = field as? UITextField
                textField?.backgroundColor = UIColor.gray
            }
        }
    }
    

    在 Obj-c 中

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

    【讨论】:

    • 您是否故意在答案中混合使用 Swift 和 Objective-C 代码? :)
    【解决方案2】:

    首先你需要下面的搜索栏扩展:

    extension UISearchBar {
        /// Return text field inside a search bar
        var textField: UITextField? {
            guard let text = self.value(forKey: "searchField") as? UITextField else {
                return nil
            }
    
            return text
        }
    }
    

    然后在你的视图控制器:

    searchBar.textField?.backgroundColor = .red
    

    【讨论】:

    • 非常感谢!这肯定是灵丹妙药。
    【解决方案3】:

    在斯威夫特中:

    var textField = searchBar.valueForKey("searchField") as? UITextField
    textField?.backgroundColor = UIColor.red   // Change as per your requirement
    

    【讨论】:

      猜你喜欢
      • 2016-02-18
      • 2020-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-31
      • 1970-01-01
      • 1970-01-01
      • 2016-07-24
      相关资源
      最近更新 更多