为什么辞职First Responder不会隐藏键盘?

时间:2013-11-21 16:18:53

标签: ios objective-c cocoa-touch uitextfield

这是我的自定义UITextField类:

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        self.delegate = self;

        [self addTarget:self action:@selector(hideKeyboard) forControlEvents:UIControlEventTouchUpOutside];

    }
    return self;
}

- (void) hideKeyboard
{
    NSLog(@"Clicked outside");
    [self resignFirstResponder];
}

但是,当我在文本字段外单击时,hideKeyboard永远不会被调用。任何人都可以解释为什么以及如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

只有在文本字段内开始触摸并在文本字段外完成触摸时,才会发生您注册的事件。

如果您在文本字段外开始触摸,则文本字段不会发生任何事件。

将触控手势识别器添加到包含文本字段的视图中。触发该事件后,请重新签名当前的第一响应者。

答案 1 :(得分:0)

你的触摸可能会被消耗它们的其他一些UIControl吞噬。没有看到你的层次结构就无法分辨。

但是,即使你在空白的UIView上只有1个UITextField,我也不建议这样做。它不能很好地扩展,如果你在视图中添加另一个UIControl,可能会导致奇怪的错误。如果你在同一个UIView中有这个TextField 一个UIButton,会发生什么?

相反,我将superview更改为UIControl(UIView的子类),并使用UIControlEventTouchUpInside触发一个解除键盘的方法。