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)  
                   } 
            }       
    }
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容