页面最上面加一个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,就可以一点击就取消搜索状态了
网友评论