我应该在UIS​​earchBar中放置代码来自定义取消按钮?

时间:2015-10-22 12:23:23

标签: xcode swift uitableview uisearchbar uisearchcontroller

我尝试更改使用UISearchController(iOS 8及更高版本)实现的UISearchBar中的“取消”按钮颜色。这是我使用的代码:

if self.resultSearchController.active {
        for subView in self.resultSearchController.searchBar.subviews  {
            for subsubView in subView.subviews  {
                if subsubView.isKindOfClass(UIButton) {
                    subsubView.tintColor =  UIColor.whiteColor()
                }
            }
        }
    }

如果我将它粘贴到viewDidLoad中,它就不起作用,因为我认为只有当SearchController变为活动状态时,取消按钮才会初始化。

如果我在viewDidLayoutSubviews中粘贴代码,一切都很顺利,但我不确定它是否正确。

那么,我应该把这段代码放在TableViewController中?

另外,我不明白,我如何在TableViewController中接收SearchController变为非活动状态的通知。换句话说,我应该把代码放在这样的地方:

if self.resultSearchController.active == false {
   //Do something 
}

3 个答案:

答案 0 :(得分:1)

首先,您应该插入委托方法: -

 class HomeViewController: UIViewController,UISearchResultsUpdating, UISearchBarDelegate {

  var searchController: UISearchController!

  override func viewDidLoad() {
    super.viewDidLoad()
    searchController = UISearchController(searchResultsController: nil)
    searchController.searchResultsUpdater = self
    searchController.dimsBackgroundDuringPresentation = false
    searchController.searchBar.placeholder = "Search here..."
    searchController.searchBar.delegate = self
    searchController.searchBar.sizeToFit()
    searchController.hidesNavigationBarDuringPresentation = true
    tableView.tableHeaderView = searchController.searchBar
    searchController.searchBar.tintColor =  UIColor.whiteColor()

}

 func searchBarTextDidBeginEditing(searchBar: UISearchBar) {

}

func searchBarCancelButtonClicked(searchBar: UISearchBar) {

}

func searchBarSearchButtonClicked(searchBar: UISearchBar) {

}

func updateSearchResultsForSearchController(searchController: UISearchController) {

}


}

然后使用委托方法并更改取消按钮颜色和你想要的东西

答案 1 :(得分:0)

您可以在AppDelegate didFinishLaunchWithOptions:中尝试此操作。

UIBarButtonItem.appearanceWhenContainedInInstancesOfClasses([UISearchBar.self]).tintColor = UIColor.whiteColor()

PS:这是一种通用方法,会影响应用中UIBarButtonItem的{​​{1}}。

答案 2 :(得分:-1)

Swift 4.2,4.0 + here添加了答案,可自定义搜索栏,如下所示:

enter image description here

您可以检查SearchBar类的用法。