如圖,當UISearchBar失去焦點的時候,取消按鈕無法響應點擊。只需要在失去焦點后,將取消按鈕的enabled設置為YES即可。一般寫在代理的searchBarSearchButtonClicked方法里。

截圖1.png
- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar {
[searchBar resignFirstResponder];
UIButton *cancelBtn = [searchBar valueForKey:@"cancelButton"];
cancelBtn.enabled = YES;
}
顯然,有個問題,如何知道私有屬性名的呢?這里請參考《利用runtime獲取私有屬性名及類型》。
除了使用kvc,還可以遍歷UISearchBar子控件,但是這里需要使用遞歸的方法遍歷子控件,才能找到cancelBtn。