今天要实现一个基于 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 就忍不了。
网友评论