我正在使用 iOSOpenDev 为通知中心制作一个 weeapp。我有UITextField
一个UIView
并且已经实现了UITextFieldDelegate
协议。
我的问题是textFieldShouldClear
在单击 UITextField 中的清除按钮时永远不会调用该方法。调用其他接口方法,例如 shouldChangeCharactersInRange 和 textFieldShouldReturn 没有问题。
任何想法为什么永远不会调用接口方法?
我正在使用 iOSOpenDev 为通知中心制作一个 weeapp。我有UITextField
一个UIView
并且已经实现了UITextFieldDelegate
协议。
我的问题是textFieldShouldClear
在单击 UITextField 中的清除按钮时永远不会调用该方法。调用其他接口方法,例如 shouldChangeCharactersInRange 和 textFieldShouldReturn 没有问题。
任何想法为什么永远不会调用接口方法?
当我在用户点击屏幕上的其他地方时关闭键盘时遇到了这个问题。我有一个手势识别器来寻找点击,当检测到点击时,它会在文本字段上调用 resignFirstResponder。不幸的是,这破坏了清除按钮。
我所做的是过滤水龙头以确保它们在表格视图之外,由于必须手动触发按钮水龙头而稍微复杂:
// In: - (void)handleTap:(UITapGestureRecognizer *)sender {
// The user tapped outside a text field, drop the keyboard.
// Unfortunately this normally breaks the clear button, so we'll check that the
// tap is outside the table view (and therefore not on a clear button).
BOOL inButton = CGRectContainsPoint(self.signInButton.bounds, [sender locationInView:self.signInButton]);
BOOL inTable = CGRectContainsPoint(self.tableView.bounds, [sender locationInView:self.tableView]);
if (!inTable && !inButton ) {
BOOL didEndEditing = [self.view endEditing:NO];
// But... if we were editing a field (& therefore the keyboard is showing),
// and if they tapped the sign in button, sign in. Not sure where the
// onSignIn event is getting lost. The button does highlight. But the
// call to endEditing seems to eat it.
if (didEndEditing && inButton) {
[self onSignIn:self.signInButton];
}
}
确保文本字段的委托是自我:
theTextField.delegate = self;
我听说 UIActionSheet 吸收了 UITextFieldDelegate 协议,通知中心可能也会这样做......
根据 Graham Perks 的回答,我将 resignFirstResponder 调用更改为:
[self.focusInput performSelector: @selector(resignFirstResponder)
withObject: nil
afterDelay: 0.2f];
现在键盘按预期自动隐藏在水龙头上,但清除按钮功能又回来了。