5

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

我不确定我可以在这里提供什么代码示例。如果这很重要,我正在使用故事板。

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

有没有更好的解决方法?

我在 iOS 6 上。

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

  • UITextFieldUiButton在表格上。
  • resignFirstResponder通过调用处理程序关闭键盘UITapGestureRecognizer

重现问题的步骤:

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

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

4

3 回答 3

5

我遇到了完全相同的问题。至少在我的情况下,这是由于添加了 a UITapGestureRecognizerto self.view(以允许在 a 之外点击时关闭键盘UITextField并设置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];

(注册通知)

- (void)keyboardDidShowNotification:(NSNotification*)notification
{
    tapGestureRecognizer.cancelsTouchesInView = YES;
}

- (void)keyboardDidHideNotification:(NSNotification *)notification
{
    tapGestureRecognizer.cancelsTouchesInView = NO;
}

(处理通知)

就行为而言,唯一的问题是超链接在显示键盘时仍然不起作用:触摸它只会关闭键盘,而不是将触摸转发给链接处理程序。但我可以忍受。关闭键盘后,链接工作正常。

于 2014-12-03T21:35:46.950 回答
2

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

实现textFieldShouldClear委托并在此处编写代码清除您的文本字段

为此,您必须设置clearButtonMode属性,

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

然后实现textFieldShouldClear委托

.h 文件

@interface myViewController: UIViewController <UITextFieldDelegate>{
}

.m 文件

-(BOOL)textFieldShouldClear:(UITextField *)textField

    yourTextFeild.text = @"";
    return YES;
}
于 2013-09-06T07:06:58.880 回答
-1

在这里尝试:

-(BOOL) textFieldShouldReturn:(UITextField*) textField
于 2013-09-06T07:06:33.260 回答