Xcode 我应该在UISearchBar中将自定义取消按钮的代码放在哪里?

Xcode 我应该在UISearchBar中将自定义取消按钮的代码放在哪里?,xcode,swift,uitableview,uisearchbar,uisearchcontroller,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 { i

我试图在用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 
}

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

 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) {

}


}

然后使用委派方法并更改取消按钮的颜色和所需内容

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

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

PS:这是一种通用方法,将影响整个应用程序中
UISearchBar
中的
UIBarButtonItem

Swift
4.2,4.0+为自定义搜索栏添加了一个答案,可按如下所示进行自定义


您可以查看
搜索栏的使用情况。

谢谢!这很有帮助。我的问题是我忘记将自己分配给.searchBar.delegate