现状:
当 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)
}
}
}