如何检测UITextField上的点击?

Jos*_*osa 17 cocoa-touch objective-c ios

我有一个禁用用户交互的UITextField.因此,如果点击此文本字段,则不会发生任何事情.通常检查文本字段是否被点击Id尝试委托方法,但我不能,因为禁用了用户交互.有什么方法可以检查文本字段是否被轻击/触摸?我将另一个元素更改为hidden = no; 当它被点击时,我想知道它是否甚至可以实现用户交互.

Grz*_*ski 40

最佳选择是打开用户交互并使用委托方法禁用编辑操作.

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
     return NO;
} 
Run Code Online (Sandbox Code Playgroud)

您可以在该函数内调用您的方法来检测tap.

  • 它工作 - 你只需要检查if(textField == self.blockedTextField)是否返回NO; 否则返回YES; (3认同)
  • 试过这个,但我有其他文本字段,所以这不起作用. (2认同)
  • Josue,您必须确保使用textFieldShouldBeginEditing方法将UITextField的委托设置为UIViewController. (2认同)

Cam*_*amo 24

也许,您可以添加超UITapGestureRecognizer视图,检测触摸是否在框架内,然后执行某些操作.

如果触摸位于超视图的帧内,则检测触摸

  1. 创建UITapGestureRecognizer并添加到UITextField超级视图.
  2. 实现目标选择器并检查手势的状态是否已结束.
  3. 打电话给你的方法

Objective-C的

UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(didRecognizeTapGesture:)];
[self.textField.superview addGestureRecognizer:tapGesture];


- (void) didRecognizeTapGesture:(UITapGestureRecognizer*) gesture {
    CGPoint point = [gesture locationInView:gesture.view];

    if (gesture.state == UIGestureRecognizerStateEnded) {
        if (CGRectContainsPoint(self.textField.frame, point)) {
            [self doSomething];
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

斯威夫特3

func viewDidLoad() {
    let tapGesture = UITapGestureRecognizer(target: self, action: #selector(didRecognizeTapGesture(_:)))

    textField.superView?.addGestureRecognizer(tapGesture)
}

private dynamic func didRecognizeTapGesture(_ gesture: UITapGestureRecognizer) {
    let point = gesture.location(in: gesture.view)

    guard gesture.state == .ended, textField.frame.contains(point) else { return }

    //doSomething()
}
Run Code Online (Sandbox Code Playgroud)

  • 点击文本字段时不调用,仅在其外部调用 (3认同)