有没有人注意到 UITextField
在按下清除按钮后调用 textFieldDidEndEditing
但 text
属性仍然有旧数据?
我不确定我可以在这里提供什么代码示例。如果重要的话,我正在使用 Storyboard。
现在我必须依赖于从主窗体的“提交”按钮上的所有编辑控件获取数据。但理想情况下,我更愿意在 textFieldDidEndEditing
处理程序中收集数据。
有没有更好的解决方法?
我使用的是 iOS 6。
更新:基本上这是我在表格上的内容
UITextField
和UiButton
在表单上。- 通过在
UITapGestureRecognizer
的处理程序中调用resignFirstResponder
关闭键盘
重现问题的步骤:
- 点击编辑控件。输入一些文字。
- 在文本控制之外点击。
textFieldDidEndEditing
被调用。属性.text
具有我输入的值。一切都好。- 再次点击编辑控件。
- 点击清除按钮。 再次调用
textFieldDidEndEditing
。但是属性.text
仍然具有我刚刚删除的值!- 现在,当您看到光标在 UITextField 中闪烁时,点击表单上的按钮。
- 键盘被
textFieldDidEndEditing
关闭,从未被调用。
我明天会在 GitHub 上上传示例项目。
最佳答案
我遇到了完全相同的问题。至少就我而言,这是由于添加了 UITapGestureRecognizer
。至 self.view
(允许在 UITextField
之外点击时关闭键盘)并设置 cancelsTouchesInView=NO
在手势识别器上。我已经设置了该属性,以便在 TTTAttributesLabel
上获得超链接。我在 View 的其他地方。
我的解决方法是观察键盘显示和隐藏通知,并相应地切换该属性:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidShowNotification:) name:UIKeyboardDidShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidHideNotification:) name:UIKeyboardDidHideNotification object:nil];
(注册接收通知)
- (void)keyboardDidShowNotification:(NSNotification*)notification
{
tapGestureRecognizer.cancelsTouchesInView = YES;
}
- (void)keyboardDidHideNotification:(NSNotification *)notification
{
tapGestureRecognizer.cancelsTouchesInView = NO;
}
(处理通知)
唯一的问题是,在行为方面,超链接在显示键盘时仍然不起作用:触摸它只会关闭键盘,不会将触摸转发给链接处理程序。但我可以忍受。关闭键盘后,链接正常。
关于ios - 清除时 UITextField 调用 textFieldDidEndEditing 但 `text` 属性有数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18651782/