iOS小问题之 SearchBar收回键盘后点击取消按钮没反应

页面最上面加一个SearchBar下面再来一个列表是很常见的设计,但自己在实现这种设计的时候出现一个问题。
如图,键盘收起来之后,cancelButton的颜色变灰,点击按钮键盘会重新弹起来,再按一下searchBar才会取消搜索状态。可是正常情况应该是无论什么时候点击cancelButton searchBar也要马上取消搜索状态。

首先如果你用Textfield和Button自定义控件的话就不会出现这个问题,但你又想省时用searchBar的话就要把cancelButton的响应状态改变。

cancelButton属性不能直接被调用,所以首先用NSLog(@"path = %@", [path performSelector:@selector(_methodDescription)]) 或者runtime打印出searchBar所有属性,发现里面确实有_cancelButton这个属性,接下来我们就可以用KVC用获取和改变它了

if let button = searchBar.value(forKey: "_cancelButton")as? UIButton
        {
            button.alpha = 1
            button.setTitleColor(kRGBA(17, g: 17, b: 17, a: 1), for: .normal)
            button.isUserInteractionEnabled = true
            button.isEnabled = true
            
            let view = searchBar.value(forKey: "_maskView")as? UIView
            view?.removeFromSuperview()
            
        }

将_cancelButton的isUserInteractionEnabled改成true,就可以一点击就取消搜索状态了

你可能感兴趣的:(iOS小问题之 SearchBar收回键盘后点击取消按钮没反应)