UITapGestureRecognizer 未在 UITextField 中触发
UITapGestureRecognizer not firing in UITextField
我有一种情况需要区分用户点击文本字段和文本字段以编程方式获得焦点。在此设置中,文本字段可以通过编程方式或通过用户交互获得焦点。因此,textShouldBeginEditing 是不合适的,因为无论事件是用户交互还是编程,都会调用它。
我的文本字段位于 table 视图中,我正在尝试在 cellForRowAtIndexPath 中设置手势识别器。这是我来自 cellForRowAtIndexPath 的代码:
if([cell isKindOfClass:[PPTTextCell class]]){
UITapGestureRecognizer *textTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(textTapped:)];
UITextField* textField = (UITextField*)[self getInputControlFromCell:cell];
[textField setUserInteractionEnabled:YES];
[textField.superview addGestureRecognizer:textTap];
}
方法 getInputControlFromCell
returns 如果单元格中存在一个文本字段。在同一个 class 中,我有以下内容:
- (void) textTapped:(UITapGestureRecognizer*)tap {
NSLog(@"text field tappped");
}
点击文本字段时,永远不会触发 textTapped 方法。我错过了什么?谢谢!
UITextField 不发送触摸事件,但您可以创建一个子类并覆盖 pointInside: withEvent:
方法。
- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event {
NSLog(@"text field tappped");
return YES;
}
我有一种情况需要区分用户点击文本字段和文本字段以编程方式获得焦点。在此设置中,文本字段可以通过编程方式或通过用户交互获得焦点。因此,textShouldBeginEditing 是不合适的,因为无论事件是用户交互还是编程,都会调用它。
我的文本字段位于 table 视图中,我正在尝试在 cellForRowAtIndexPath 中设置手势识别器。这是我来自 cellForRowAtIndexPath 的代码:
if([cell isKindOfClass:[PPTTextCell class]]){
UITapGestureRecognizer *textTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(textTapped:)];
UITextField* textField = (UITextField*)[self getInputControlFromCell:cell];
[textField setUserInteractionEnabled:YES];
[textField.superview addGestureRecognizer:textTap];
}
方法 getInputControlFromCell
returns 如果单元格中存在一个文本字段。在同一个 class 中,我有以下内容:
- (void) textTapped:(UITapGestureRecognizer*)tap {
NSLog(@"text field tappped");
}
点击文本字段时,永远不会触发 textTapped 方法。我错过了什么?谢谢!
UITextField 不发送触摸事件,但您可以创建一个子类并覆盖 pointInside: withEvent:
方法。
- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event {
NSLog(@"text field tappped");
return YES;
}