我想知道听写何时结束(理想情况下也就是开始时)。
我的UIViewController
包含UITextView
符合UITextInputDelegate
协议的内容。
要使其正常工作,我必须订阅UITextInputCurrentInputModeDidChangeNotification
override func viewDidLoad() {
super.viewDidLoad()
NSNotificationCenter.defaultCenter().addObserver(self, selector: "changeInputMode:", name: UITextInputCurrentInputModeDidChangeNotification, object: nil)
}
并在那里添加委托(它只是将其添加到viewDidLoad()无效)
func changeInputMode(sender : NSNotification) {
textView.inputDelegate = self
}
启动和停止听写UITextInput现在可以正确调用所需的委托方法:
func selectionWillChange(textInput: UITextInput){ }
func selectionDidChange(textInput: UITextInput){ }
func textWillChange(textInput: UITextInput){ }
func textDidChange(textInput: UITextInput){ }
然而,没有被调用的是
func dictationRecordingDidEnd() {
println("UITextInput Dictation ended")
}
为什么呢?我怎样才能收到通知/调用听写方法?
答案 0 :(得分:4)
好的,这对我来说不是使用UITextInput
协议,而是使用UITextInputCurrentInputModeDidChangeNotification
。
func changeInputMode(sender : NSNotification) {
var primaryLanguage = textView.textInputMode?.primaryLanguage
if primaryLanguage != nil {
var activeLocale:NSLocale = NSLocale(localeIdentifier: primaryLanguage!)
if primaryLanguage == "dictation" {
// dictation started
} else {
// dictation ended
}
}
}