2

我正在使用 iOSOpenDev 为通知中心制作一个 weeapp。我有UITextField一个UIView并且已经实现了UITextFieldDelegate协议。

我的问题是textFieldShouldClear在单击 UITextField 中的清除按钮时永远不会调用该方法。调用其他接口方法,例如 shouldChangeCharactersInRange 和 textFieldShouldReturn 没有问题。

任何想法为什么永远不会调用接口方法?

4

3 回答 3

1

当我在用户点击屏幕上的其他地方时关闭键盘时遇到了这个问题。我有一个手势识别器来寻找点击,当检测到点击时,它会在文本字段上调用 ​​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];
    }
}
于 2013-07-17T18:02:56.467 回答
0

确保文本字段的委托是自我:

theTextField.delegate = self;

我听说 UIActionSheet 吸收了 UITextFieldDelegate 协议,通知中心可能也会这样做......

于 2012-02-19T23:49:07.993 回答
0

根据 Graham Perks 的回答,我将 resignFirstResponder 调用更改为:

[self.focusInput performSelector: @selector(resignFirstResponder)
                      withObject: nil
                      afterDelay: 0.2f];

现在键盘按预期自动隐藏在水龙头上,但清除按钮功能又回来了。

于 2013-07-25T23:04:31.240 回答