开发者

UISearchBar: changing background color of input field

开发者 https://www.devze.com 2023-04-01 00:18 出处:网络
I\'m trying to change the background color of input field of UISearchBar.It\'s the rounded view where you input text to search, the default color is white. I would like to change it to gray

I'm trying to change the background color of input field of UISearchBar.It's the rounded view where you input text to search, the default color is white. I would like to change it to gray

I tried:

for (UIView *subV开发者_C百科iew in searchBar.subviews) {
    if ([subView isKindOfClass:NSClassFromString(@"UITextField")]) {
        UITextField *textField = (UITextField *)subView;
        [textField setBackgroundColor:[UIColor grayColor]];
    }

But it doesn't work :(

I also tried to insert an image view to TextField but it seems the rounded view is separate from TextField. So, any clues?


=)

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


Look at the function :

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


In Swift 2 and iOS 9 you can call:

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

Swift 3:

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


Solution in Swift 3:

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


Take the extension worked in 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
    }
}

usage:

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

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号