如何测试用户是否更改了UITextInput?

时间:2015-06-03 09:51:39

标签: ios swift uitextfield uitextinput uiinputviewcontroller

我正在为iOS开发自定义键盘,使用UIInputViewController我实现了以下方法: textWillChange textDidChange

我想知道用户何时更改当前文本字段并移至另一个文本字段,以便配置键盘中当前按下的文本字段的自动大写参数。

现在我尝试做这样的事情:

override func textWillChange(textInput: UITextInput) {
    if !textInput.isEqual(self.mCurrentTextInput) {
        Logger.printLogToConsole(TAG, aMethodName: __FUNCTION__, aMessage: "TextInput has changed!")
        KeyboardState.sharedInstance.setAutoCapitalizationFlag()
    }
    self.mCurrentTextInput = textInput
}

甚至是这样的事情:

override func textWillChange(textInput: UITextInput) {
     if self.mCurrentTextInput == nil {
        if let view = textInput.textInputView {
            self.mCurrentTextInput = view
            KeyboardState.sharedInstance.setAutoCapitalizationFlag()
        }
        Logger.printLogToConsole(TAG, aMethodName: __FUNCTION__, aMessage: "TextInput has changed!")
    } else if self.mCurrentTextInput!.isEqual(textInput) {
        Logger.printLogToConsole(TAG, aMethodName: __FUNCTION__, aMessage: "TextInput has changed!")
        if let view = textInput.textInputView {
            KeyboardState.sharedInstance.setAutoCapitalizationFlag()
            self.mCurrentTextInput = view
        }
    }
}

但这些选项都不适合我。

UPDATE:您可以注意到我在回调方法中收到的对象不是UITextField对象,而是UITextInput对象,它实际上是一个协议,而不是文本字段本身。所以我无法添加观察者。 我的键盘应用程序无法控制用户输入文本的字段。

问题:如何识别用户更改其当前文本字段的时刻?

1 个答案:

答案 0 :(得分:0)

我正在使用Objective C,因为我现在有这个代码: -

您可以使用 KVO ,我猜您的目标是: -

static void *contextNew = &contextNew;

//Observe change to txtfeild.text:

[self.txtfeild addObserver:self forKeyPath:@"text"
            options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld 
            context:contextNew];


-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object 
        change:(NSDictionary *)change context:(void *)context {

          if(context == contextNew) {

              NSLog(@"txtfeild new text : %@ - txtfeild Old text: %@",
              [change objectForKey:NSKeyValueChangeNewKey],
              [change objectForKey:NSKeyValueChangeOldKey]);
          }
    }