新的一年来了,相信新的开始,大家都有很多美好的愿景,希望大家都能达成,并且在这里祝大家新年快乐!
最近遇到一个很简单的需求,在地址栏中进行筛选,仅限于前端。另外,在用户搜索完毕后,点击输入框右侧的 X 按钮进行清除,注销键盘第一使用者。
如图所示的需求
因为有些图标定制了,所以没有用系统的UISearchController,自己写了几个按钮输入框搭建成了界面。
最后代码如下写
// 实现 X 点击后的代理方法
- (BOOL)textFieldShouldClear:(UITextField *)textField
{
return YES;
}
发现完全不起作用。原因是在textFieldShouldClear方法执行后,系统会马上执行 textFieldShouldBeginEditing 方法,瞬间将键盘再次激活键盘为第一响应者。。。还真是有些坑。
后来想了想,既然会瞬间激活第一响应者,我们就在激活之后,延时0.1 秒将键盘的响应再次注销就好了,并且将相应的清除响应关闭。
如图所示
// 实现 X 点击后的代理方法
- (BOOL)textFieldShouldClear:(UITextField *)textField
{
textField.text = @"";
[textField performSelector:@selector(resignFirstResponder) withObject:nil afterDelay:.1];
return NO;
}
至此大功吿成。