【iOS开发】如何在textFieldShouldClear方法中resignFirstResponder(隐藏键盘)

2,157 阅读1分钟

新的一年来了,相信新的开始,大家都有很多美好的愿景,希望大家都能达成,并且在这里祝大家新年快乐!

最近遇到一个很简单的需求,在地址栏中进行筛选,仅限于前端。另外,在用户搜索完毕后,点击输入框右侧的 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;
}

至此大功吿成。