Textfield包含数据选择器。因为选择器没有Return
按钮,所以我必须以某种方式关闭inputView
。我不想使用inputAccessoryView
所以我虽然如果用户再按一次,则textfield应该关闭textfield 。但我不知道如何检测触摸事件。我将UITextField
和touchesBegan
方法分类,但如果我将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()
}
}
}
答案 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];
}