这是我的自定义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
永远不会被调用。任何人都可以解释为什么以及如何解决这个问题?
答案 0 :(得分:2)
只有在文本字段内开始触摸并在文本字段外完成触摸时,才会发生您注册的事件。
如果您在文本字段外开始触摸,则文本字段不会发生任何事件。
将触控手势识别器添加到包含文本字段的视图中。触发该事件后,请重新签名当前的第一响应者。
答案 1 :(得分:0)
你的触摸可能会被消耗它们的其他一些UIControl吞噬。没有看到你的层次结构就无法分辨。
但是,即使你在空白的UIView上只有1个UITextField,我也不建议这样做。它不能很好地扩展,如果你在视图中添加另一个UIControl,可能会导致奇怪的错误。如果你在同一个UIView中有这个TextField 和一个UIButton,会发生什么?
相反,我将superview更改为UIControl(UIView的子类),并使用UIControlEventTouchUpInside触发一个解除键盘的方法。