如何检测活动文本字段再次被触摸?

时间:2014-11-12 10:58:03

标签: ios uitextfield

Textfield包含数据选择器。因为选择器没有Return按钮,所以我必须以某种方式关闭inputView。我不想使用inputAccessoryView所以我虽然如果用户再按一次,则textfield应该关闭textfield 。但我不知道如何检测触摸事件。我将UITextFieldtouchesBegan方法分类,但如果我将userInteractionEnabled设置为false,它就永远不会被调用。

我试图设置一个轻敲手势识别器,首先它会触发,但第二次没有。

class TextFieldCloseWhenTouched: UITextField {

    override func didMoveToWindow() {

        self.addGestureRecognizer(UITapGestureRecognizer(target: self, action: "tapped"))
    }

    func tapped() {
        if self.isFirstResponder() {
            self.resignFirstResponder()
        } else {
            self.becomeFirstResponder()
        }
    }
}

1 个答案:

答案 0 :(得分:0)

您可以使用委托函数(BOOL)textFieldShouldBeginEditing:(UITextField *)textField来实现此目的,而无需子类化textfield,但是您需要自己处理添加和删除选择器的动画,而不是输入视图。

-(BOOL)textFieldShouldBeginEditing:(UITextField *)textField{
  if(isTextFieldOpen){
     [self dismissDataPicker];
  }
  else{
     [self showDataPicker];
  }
  isTextFieldOpen=!isTextFieldOpen;

  return NO;

}

但是,我不认为这是最好的用户体验。我认为最好将数据选择器添加到具有完成/取消按钮的工具栏的UIView,或者在显示数据选择器时向主视图添加轻击手势识别器,以便当用户点击它被解除的任何地方时。 如果这是您屏幕中唯一的文本字段,或者您可以通过点击任意位置来解除所有文本字段,则可以将以下内容添加到您的viewcontroller

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
    [super touchesBegan:touches withEvent:event];
    [self.view endEditing:YES];
}