清除时,UITextField调用textFieldDidEndEditing,但`text`属性有数据

时间:2013-09-06 07:00:00

标签: ios ios6 uitextfield uitextfielddelegate

有没有人注意到在按下清除按钮后UITextField调用textFieldDidEndEditingtext属性仍有旧数据?

我不确定我在这里提供的代码示例。如果重要的话,我正在使用故事板。

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

有没有更好的解决方法?

我在iOS 6上。

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

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

重现问题的步骤:

  • 点击编辑控件。输入一些文字。
  • 点击文字控件之外。
  • textFieldDidEndEditing被调用。属性.text具有我输入的值。一切都好。
  • 再次点击编辑控件。
  • 点击清除按钮。
  • 再次调用
  • textFieldDidEndEditing。但是属性.text仍然具有我刚删除的价值!
  • 现在,当您看到UITextField内的光标闪烁时,点击表单上的Button。
  • textFieldDidEndEditing从未调用过键盘被解雇。

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

3 个答案:

答案 0 :(得分:5)

我遇到了完全相同的问题。在我的情况下,至少,这是由于向UITapGestureRecognizer添加self.view(如果在UITextField之外点击允许解雇键盘)并设置{{ 1}}在手势识别器上。我已经设置了该属性,以便在视图中的其他地方cancelsTouchesInView=NO处获得超链接。

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

TTTAttributesLabel

(注册通知)

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidShowNotification:) name:UIKeyboardDidShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidHideNotification:) name:UIKeyboardDidHideNotification object:nil];

(处理通知)

行为方面唯一的问题是,当显示键盘时,超链接仍然不起作用:触摸它只会解除键盘,而不是将触摸转发给链接处理程序。但我可以忍受这一点。键盘解除后,链接正常。

答案 1 :(得分:1)

首先检查UITextFieldDelegate是否已分配,然后

实现textFieldShouldClear委托并在此处编写代码,清除textField

要执行此操作,您必须设置clearButtonMode属性

yourTextField.clearButtonMode = UITextFieldViewModeWhileEditing;
yourTextField.delegate = self;

然后实施textFieldShouldClear委托

.h文件

@interface myViewController: UIViewController <UITextFieldDelegate>{
}

.m文件

-(BOOL)textFieldShouldClear:(UITextField *)textField

    yourTextFeild.text = @"";
    return YES;
}

答案 2 :(得分:-1)

试试这里:

-(BOOL) textFieldShouldReturn:(UITextField*) textField