2

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

3 回答 3

2

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

于 2012-10-15T23:59:04.243 回答
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(identifier) 为您提供所需的字符串)......不要认为这会标记苹果拒绝但买家要小心。

于 2012-10-17T22:58:26.887 回答
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 中运行良好。

于 2014-12-09T16:15:18.510 回答