【问题标题】:UITextFieldTextDidChangeNotification doesn't get called on ios6 ipad3ios6 ipad3 上没有调用 UITextFieldTextDidChangeNotification
【发布时间】:2012-10-05 22:39:36
【问题描述】:

有以下几点:

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

然后:

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

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


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

【问题讨论】:

    标签: objective-c ios6


    【解决方案1】:

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

    【讨论】:

    • 您是否偶然将此作为错误报告给 Apple?
    【解决方案2】:

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

    【讨论】:

    • 在哪里可以找到在 ios6 上运行的类似内容?
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      在我的 ipad3 和 iOS6.0 通知 UITextFieldTextDidChangeNotification 上工作正常。放

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

      在你看来DidLoad

      【讨论】:

        【解决方案5】:

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

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

        该代码将继续触发事件。

        这也有效:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-12-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-09-12
          相关资源
          最近更新 更多