有人注意到按下清除按钮后UITextField会调用textFieldDidEndEditing,但是text属性仍然具有旧数据吗?

我不确定我可以在这里提供什么代码示例。如果重要的话,我正在使用 Storyboard 。

现在,我必须依靠从主窗体的“提交”按钮上的所有编辑控件中获取数据。但理想情况下,我希望在textFieldDidEndEditing处理程序中收集数据。

有更好的解决方法吗?

我在iOS 6上。

更新:基本上这就是我在表单上的内容

  • UITextFieldUiButton在表单上。
  • 通过在resignFirstResponder的处理程序中调用UITapGestureRecognizer而放弃了键盘

  • 重现此问题的步骤:
  • 单击编辑控件。输入一些文字。
  • 在文本控件之外点击。
  • textFieldDidEndEditing被调用。属性.text具有我输入的值。都好。
  • 再次单击编辑控件。
  • 单击清除按钮。
  • textFieldDidEndEditing再次被调用。但是属性.text仍然具有我刚刚删除的值!
  • 现在,您看到光标在UITextField中闪烁,请轻按窗体上的Button。
  • 从未调用过textFieldDidEndEditing来关闭键盘。

  • 我明天将在GitHub上上传示例项目。

    最佳答案

    我遇到了完全相同的问题。至少在我来说,这是由于在UITapGestureRecognizer中添加了self.view(如果在UITextField之外点击则允许释放键盘)并在手势识别器上设置cancelsTouchesInView=NO。我已经设置了该属性,以使超链接可以在 View 中其他位置的TTTAttributesLabel上工作。

    我的解决方法是观察键盘显示和隐藏通知,并相应地切换该属性:

    [[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/

    10-12 00:42
    查看更多