dictationRecordingDidEnd从未打过电话

时间:2012-09-04 17:04:27

标签: ios uitextview

我正在使用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";
}

3 个答案:

答案 0 :(得分:2)

我认为您不想使用UITextInputDelegate协议而是使用UITextInput。

答案 1 :(得分:2)

我遇到了同样的问题......似乎这些方法没有被调用(并且在5.1之前根本没有被调用)。我确实注意到每次输入模式改变时都会发送通知:

UITextInputCurrentInputModeDidChangeNotification

如果您正在收听(在NSNotificationCenter中),然后致电:

[[UITextInputMode currentMode] performSelector:@selector(identifier)];

您将获得当前输入模式的NSString。按照这个逻辑,你可以知道,当它从@“dictate”变为其他东西时,那么听写部分就已经结束了。 (虽然文本更改可能尚未处理,但我还没有尝试过这一切。)

http://developer.apple.com/library/ios/#documentation/uikit/reference/UITextInputMode_Class/Reference/Reference.html

奇怪的是,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中运行良好。