更改UISearchBar的textField的背景

时间:2015-01-20 22:45:49

标签: ios swift uisearchbar

我现在已经挣扎了一段时间。已经到处搜索,但提供的解决方案仅适用于objective-c。其中包含

UITextField *txt = [_searchBar valueForKey:@"_searchField"];

虽然有人可能会说这是受保护的API,Apple可能拒绝使用此类代码的应用程序。

所以,现在我已经尝试了很多方法来解决这个问题,而且根本没有工作。 我的代码是这样的:

searchBar = UISearchBar(frame: CGRectMake(0, 0, 320.0, 30.0))
searchBar.autoresizingMask = UIViewAutoresizing.FlexibleWidth
searchBar.searchBarStyle = UISearchBarStyle.Minimal
searchBar.layer.cornerRadius = 15
searchBar.delegate = self

searchBar.backgroundColor = UIColor.whiteColor()

if floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_6_1{
    // Load resources for iOS 6.1 or earlier
    searchBar.placeholder = "Search";
} else {
    // The following "hack" (if we can call that) breaks the UI for different size devices.
    // Load resources for iOS 7 or later
    searchBar.placeholder = "Search                                         ";
}

这给了我奇怪的结果: enter image description here

虽然我想要的只是UISearchBar里面的文本字段有白色背景而SearchBar本身的cornerRadius比如15。

我该怎么做?

非常感谢

7 个答案:

答案 0 :(得分:27)

您必须访问UISearchBar中的UITextField。你可以做到这一点 使用valueForKey("searchField")

var textFieldInsideSearchBar = yourSearchbar.valueForKey("searchField") as? UITextField

textFieldInsideSearchBar?.textColor = yourcolor
textFieldInsideSearchBar?.backgroundColor = backgroundColor
...

您可以更改任何参数,如UITextField的textColor或backgroundColor

答案 1 :(得分:14)

在Swift 3中:

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

答案 2 :(得分:9)

添加上述答案。 如果要保持搜索栏样式UISearchBarStyleMinimal并更改UISearchBar的textField的背景,请将textField的borderStyle设置为UITextBorderStyleNone

目标C:

<table>
    <tr>
        <td> data[0,0] </td>
        <td> data[0,1] </td>
        ...
    </tr>
    <tr>
        <td> data[1,0] </td>
        <td> data[1,1] </td>
        ...
    </tr>
    ...
</table>

答案 3 :(得分:0)

雨燕5

searchBar.searchTextField.backgroundColor = .white

您可以直接更改文本字段背景的颜色。

答案 4 :(得分:0)

searchController.searchBar.searchTextField.backgroundColor = UIColor.white  searchController.searchBar.searchTextField.textColor = UIColor.black

答案 5 :(得分:0)

我不确定为什么每个人都为此主题写过一篇文章。解决方案只有两行:

    extension UISearchBar {
    
        func clearBackground() {
            backgroundImage = UIImage() // Background cleared.
            searchBarStyle = .prominent // Prominent ONLY for clear background.
            searchTextField.backgroundColor = .clear
        }
    
    }

答案 6 :(得分:-1)

UISearchBar添加扩展名以访问其UITextField

import UIKit

extension UISearchBar {

    var textField: UITextField? {
        let subViews = subviews.flatMap { $0.subviews }
        return (subViews.filter { $0 is UITextField }).first as? UITextField
    }
}

然后,您可以根据需要设置其属性:

searchController.searchBar.textField?.backgroundColor = .red
searchController.searchBar.textField?.tintColor = .yellow