Swift更改SearchBar的“No Results”标签和“Cancel”按钮

今天要实现一个基于 TableView 的搜索,基于经验沿用了 iOS7 时代的 UISearchDisplayController,XCODE 一直提示我改用 UISearchController 。先不管这个,说说碰到的修改 Cancel 按钮和修改 No Results 文字的问题。

修改 Cancel 按钮比较简单,直接通过 Controller 找到该 UINavigationButton 即可,最好的修改位置当然是在 searchDisplayControllerWillBeginSearch 方法。

func searchDisplayControllerWillBeginSearch(controller: UISearchDisplayController) {
    self.searchDisplayController?.searchBar.showsCancelButton = true
    
    var cancelButton: UIButton?
    var topView: UIView = controller.searchBar.subviews[0] as! UIView
    for view in topView.subviews  {            
        if view.isKindOfClass(NSClassFromString("UINavigationButton")){
            cancelButton =  view as? UIButton
        }
    }
    if (cancelButton != nil) {
        cancelButton?.setTitle("取消", forState: UIControlState.Normal)
        cancelButton?.setTitleColor(UIColor.appBlueColor(), forState: UIControlState.Normal)            
    }
    
}

修改 “No Results”就比较讨厌,虽然思路类似,但是找了一圈都没有直接找到该 UILabel,UISearchResultsUpdating 协议带的方法
updateSearchResultsForSearchController 也不可以。最后还是在 StackOverFlow 找到了解决方案。
原帖:http://stackoverflow.com/questions/8447086/uisearchdisplaycontroller-no-results-text

 func searchDisplayController(controller: UISearchDisplayController, shouldReloadTableForSearchString searchString: String!) -> Bool {
  
    dispatch_after(
        dispatch_time(
            DISPATCH_TIME_NOW,
            Int64(0.01)
        ),
        dispatch_get_main_queue(), {
            
            for view in self.searchDisplayController?.searchResultsTableView.subviews as! [UIView]{
                if view.isKindOfClass(NSClassFromString("UILabel")){
                    let label = view as! UILabel
                    label.text = "没有匹配"
                }
                
            }
    })
    
    return true
}

还是准备使用 SearchController 了,看到那么多 WARNING 就忍不了。

你可能感兴趣的:(Swift更改SearchBar的“No Results”标签和“Cancel”按钮)