如何检测UITextField上的点击?

时间:2013-09-10 22:04:40

标签: ios objective-c cocoa-touch

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

2 个答案:

答案 0 :(得分:39)

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

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
     return NO;
} 

您可以在该功能中调用您的方法来检测点按。

答案 1 :(得分:24)

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

检测触摸是否在超级视图的帧内

  1. 创建UITapGestureRecognizer并将其添加到UITextField的超级视图中。
  2. 实现目标选择器并检查手势的状态是否已结束。
  3. 打电话给你的方法。
  4. 目标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];
            }
        }
    }
    

    Swift 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()
    }