在ios6 ipad3上不会调用UITextFieldTextDidChangeNotification

时间:2012-10-05 22:39:36

标签: objective-c ios6

有以下内容:

// watch the fields
[[NSNotificationCenter defaultCenter]  addObserver:self
                                          selector:@selector(handleTextChange:)
                                              name:UITextFieldTextDidChangeNotification
                                            object:textField1];

然后:

-(void) handleTextChange:(NSNotification *)notification {
  ...
}

-handleTextChange:中有一个断点,但不会被解雇。 textField在Interface Builder中连接。


适用于iOS5 iPhone / iPad模拟器,适用于iOS5.1 iPad2,但不适用于iOS6 iPad3。

5 个答案:

答案 0 :(得分:7)

所以我明白了。 IOS6 SDK中的变化是,如果以编程方式更改文本字段的文本,则不会发送通知。我在所有这些视图上都有一个自定义键盘。当我点击一个键时,它会通过添加我键入的内容来更改文本字段文本值。在ios 5中,它会发送通知“textdidchange”,但不会在ios6中发送。

答案 1 :(得分:7)

Irena是正确的,当以编程方式设置文本字段时,不会触发UITextFieldTextDidChangeNotification。但是我想澄清它与iOS6无关,它与iOS 6 SDK有关。如果使用iOS 5.1 SDK进行编译,只要文本字段以编程方式或其他方式更改,即使在iOS 6设备上运行,也会触发UITextFieldTextDidChangeNotification通知。

答案 2 :(得分:1)

我的用例有些特殊,我创建了HH:MM:SS持续时间UITextField,后面输入了字符,因此在- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string中捕获字符,然后返回return (NO);以禁止自动更新UITextField ...在iOS6之前,它调用了通知,在iOS6之后,我只是在[[NSNotificationCenter defaultCenter] postNotificationName:UITextFieldTextDidChangeNotification object:self.textField];语句之前调用return

答案 3 :(得分:0)

在我的ipad3& iOS6.0通知UITextFieldTextDidChangeNotification工作正常。把

[[NSNotificationCenter defaultCenter]  addObserver:self
                                      selector:@selector(handleTextChange:)
                                          name:UITextFieldTextDidChangeNotification
                                        object:textField1];
在viewDidLoad中

答案 4 :(得分:0)

作为Apple修复此问题之前的临时解决方法,您可以使用以下代码示例:

//view is a UITextField
NSString *temp = ((UITextField*)view).text;
((UITextField*)view).text = @"";
[((UITextField*)view) insertText:[NSString stringWithFormat:@"%@%@", @"-", temp]];

该代码将继续激活该事件。

这也有效:

[((UITextField*)view) sendActionsForControlEvents:UIControlEventEditingChanged];