現狀:
當 UISearchBar的搜索條失去焦點的時候,旁邊的“取消”按鈕就不能使用了。
目標:
當取消按鈕的失去焦點的時候,依然能夠讓取消按鈕可用。
思路:
遍歷UISearchBar里面的所有子控件,拿到“取消按鈕”,將其置為可用。
為什么這里要用延時方法:
因為可能UISearchBar在失去焦點的時候,將取消按鈕置為不可用的時機比較晚,我要保證我的方法在系統的之后執行。
代碼實現:
//代理方法1
func searchBarCancelButtonClicked(searchBar: UISearchBar) {
// 取消按鈕點擊實現的功能。。。
// self.dismissViewControllerAnimated(true,completion: nil)
}
// 代理方法2
func searchBarTextDidEndEditing(searchBar: UISearchBar) {
let time: NSTimeInterval = 0.2
let delay = dispatch_time(DISPATCH_TIME_NOW, Int64(time * Double(NSEC_PER_SEC)))
dispatch_after(delay, dispatch_get_main_queue()) {
print("0.2 秒后輸出")
self.searchBarResignAndChangeUI(searchBar)
}
}
// 讓按鈕可用
func searchBarResignAndChangeUI(searchBar: UISearchBar){
searchBar.resignFirstResponder()
self.changeSearchBarCancelBtnTitleColor(searchBar)
}
// 遍歷UISearchBar的所有子控件,將其置為可用
func changeSearchBarCancelBtnTitleColor(view:UIView){
if view.isKindOfClass(UIButton){
let getBtn = view as! UIButton
getBtn.enabled = true
getBtn.userInteractionEnabled = true
// 設置取消按鈕的顏色
getBtn.setTitleColor(UIColor.orangeColor(), forState: UIControlState.Reserved)
getBtn.setTitleColor(UIColor.orangeColor(), forState: UIControlState.Disabled)
}else{
for subView in view.subviews{
self.changeSearchBarCancelBtnTitleColor(subView)
}
}
}