我正在为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对象,它实际上是一个协议,而不是文本字段本身。所以我无法添加观察者。 我的键盘应用程序无法控制用户输入文本的字段。
问题:如何识别用户更改其当前文本字段的时刻?
答案 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]);
}
}