有以下内容:
// 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。
答案 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];