UISearchBar取消按钮一直可用方案

现状:

当 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)  
                   } 
            }       
    }

你可能感兴趣的:(UISearchBar取消按钮一直可用方案)