Ios 如何检测UITextField上的点击?

Ios 如何检测UITextField上的点击?,ios,objective-c,cocoa-touch,Ios,Objective C,Cocoa Touch,我有一个禁用了用户交互的UITextField。所以,如果你点击这个文本字段,什么都不会发生。通常,要检查文本字段是否被点击,请尝试委托方法,但我不能,因为用户交互已禁用。是否有任何方法可以检查文本字段是否被点击/触摸?我将另一个元素更改为hidden=no;当它被点击时,我想知道是否有可能启用用户交互。也许,你可以在superview中添加UITapgestureRecognitizer,检测触摸是否在框架内,然后做些什么 如果触摸在超级视图的框架内,则检测触摸 创建UITapGestureR

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

也许,你可以在superview中添加
UITapgestureRecognitizer
,检测触摸是否在框架内,然后做些什么

如果触摸在超级视图的框架内,则检测触摸
  • 创建
    UITapGestureRecognizer
    并将其添加到
    UITextField
    的超级视图中
  • 执行目标选择器并检查手势的状态是否已结束
  • 调用您的方法
  • 目标-C 斯威夫特3
    最好的选择是启用用户交互,并使用委托方法禁用编辑操作

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

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

    也尝试了此方法,但我有其他文本字段,因此此方法不起作用。它起作用-您只需检查(textField==self.blockedTextField)是否返回否;否则返回YES;真奇怪-我经常使用它-你能用这种方法粘贴你的代码吗?-(BOOL)textField应该开始编辑:(UITextField*)textField{if(textField==birthdayTextField){birthdayDatePicker.hidden=NO;birthdayDatePicker.alpha=0;return NO;}否则{return YES;}Josue,您必须确保使用textFieldShouldBeginEditing方法将UIExtField的委托设置为UIViewController。作为未来访问者的旁注:如果要打开选择器为UIExtField选择值,请将选择器用作文本字段inputView。当点击文本字段时,将自动显示选择器而不是键盘。此外,还可以选择使用UIToolBar作为文本字段inputAccessoryView,该视图将显示在选择器上方(对于“完成”按钮等)。点击文本字段时不调用,仅在文本字段外部调用
    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()
    }
    
    - (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
    {
         return NO;
    }