我正在使用UITextView并在我的视图控制器中添加了UITextInputDelegate。我已经实现了textDidChange和dictationRecordingDidEnd方法。永远不会调用textDidChange和dictationRecordingDidEnd。请帮忙。
在MyViewController.h文件中
@interface MyViewController : UIViewController <UITextViewDelegate, UITextInputDelegate>
{
}
在MyViewController.m文件中
- (void) textDidChange:(id<UITextInput>)textInput
{
}
- (void)dictationRecordingDidEnd
{
}
- (void)dictationRecognitionFailed
{
textViewResults.text = @"Dictation Failed";
}
答案 0 :(得分:2)
我认为您不想使用UITextInputDelegate协议而是使用UITextInput。
答案 1 :(得分:2)
我遇到了同样的问题......似乎这些方法没有被调用(并且在5.1之前根本没有被调用)。我确实注意到每次输入模式改变时都会发送通知:
UITextInputCurrentInputModeDidChangeNotification
如果您正在收听(在NSNotificationCenter中),然后致电:
[[UITextInputMode currentMode] performSelector:@selector(identifier)];
您将获得当前输入模式的NSString。按照这个逻辑,你可以知道,当它从@“dictate”变为其他东西时,那么听写部分就已经结束了。 (虽然文本更改可能尚未处理,但我还没有尝试过这一切。)
奇怪的是,UITextInputMode不是私有的,但是方法返回的对象没有任何公共访问器...(因此@selector(标识符)为你提供了你需要的字符串)...不要认为这将标志着苹果的拒绝,但买家要小心。
答案 2 :(得分:1)
尝试覆盖dictationRecordingDidEnd方法,改为:
#import <UIKit/UIKit.h>
@interface MyTextField : UITextField
@end
#import "MyTextField.h"
@implementation MyTextField
- (void) dictationRecordingDidEnd {
printf("dictationRecordingDidEnd\n");
}
@end
我没有回去并在早期的操作系统下测试过,但它在iOS 8.1.1中运行良好。