解决听写/自定义文本查看错误

我有一个实现UIKeyInput的视图,并重写shouldBecomeFirstResponder返回YES 。 点击此视图时,popup键盘。 如果用户点击听写button,推送完成,然后尝试解除键盘,应用程序崩溃:

 Fatal Exception: NSInternalInconsistencyException NSInternalInconsistencyException We were never set up properly to stream in this document. 

我想知道是否有人知道解决这个错误的工作? 我试着实现UITextInput并将听写相关的方法留空,这实际上起作用。 但是,当用户尝试使用听写和放入垃圾时, UITextInput正在访问我的insertText方法。 我还没有准备好实施听写,所以实际上我只是想通过某种解决方法来禁用它。 任何input将不胜感激!

实际上,实施UITextInput解决了这个问题。 当用户做了一个成功的听写,它只会发送一个空间到您的insertText方法(不完全确定如何让听写正常工作在自定义文本视图,现在我只是想修复这个错误)。 下面我列出了所有你需要使用的方法和属性为UITextInput节省一些时间:

属性

 @property(nonatomic, readonly) UITextPosition *beginningOfDocument; @property(nonatomic, readonly) UITextPosition *endOfDocument; @property(nonatomic, assign) id<UITextInputDelegate> inputDelegate; @property(nonatomic, readonly) UITextRange *markedTextRange; @property(nonatomic, copy) NSDictionary *markedTextStyle; @property(readwrite, copy) UITextRange *selectedTextRange; @property(nonatomic, readonly) id<UITextInputTokenizer> tokenizer; 

方法

 - (UITextWritingDirection)baseWritingDirectionForPosition:(UITextPosition *)position inDirection:(UITextStorageDirection)direction { return nil; } - (CGRect)caretRectForPosition:(UITextPosition *)position { return CGRectZero; } - (void)unmarkText { } - (UITextRange *)characterRangeAtPoint:(CGPoint)point { return nil; } - (UITextRange *)characterRangeByExtendingPosition:(UITextPosition *)position inDirection:(UITextLayoutDirection)direction { return nil; } - (UITextPosition *)closestPositionToPoint:(CGPoint)point { return nil; } - (UITextPosition *)closestPositionToPoint:(CGPoint)point withinRange:(UITextRange *)range { return nil; } - (NSComparisonResult)comparePosition:(UITextPosition *)position toPosition:(UITextPosition *)other { return nil; } - (void)dictationRecognitionFailed { } - (void)dictationRecordingDidEnd { } - (CGRect)firstRectForRange:(UITextRange *)range { return CGRectZero; } - (CGRect)frameForDictationResultPlaceholder:(id)placeholder { return CGRectZero; } - (void)insertDictationResult:(NSArray *)dictationResult { } - (id)insertDictationResultPlaceholder { return nil; } - (NSInteger)offsetFromPosition:(UITextPosition *)fromPosition toPosition:(UITextPosition *)toPosition { return nil; } - (UITextPosition *)positionFromPosition:(UITextPosition *)position inDirection:(UITextLayoutDirection)direction offset:(NSInteger)offset { return nil; } - (UITextPosition *)positionFromPosition:(UITextPosition *)position offset:(NSInteger)offset { return nil; } - (UITextPosition *)positionWithinRange:(UITextRange *)range farthestInDirection:(UITextLayoutDirection)direction { return nil; } - (void)removeDictationResultPlaceholder:(id)placeholder willInsertResult:(BOOL)willInsertResult { } - (void)replaceRange:(UITextRange *)range withText:(NSString *)text { } - (NSArray *)selectionRectsForRange:(UITextRange *)range { return nil; } - (void)setBaseWritingDirection:(UITextWritingDirection)writingDirection forRange:(UITextRange *)range { } - (void)setMarkedText:(NSString *)markedText selectedRange:(NSRange)selectedRange { } - (NSString *)textInRange:(UITextRange *)range { return nil; } - (UITextRange *)textRangeFromPosition:(UITextPosition *)fromPosition toPosition:(UITextPosition *)toPosition { return nil; }