我想知道听写何时结束(最好是何时开始)。
包括UITextView
的我的UIViewController
符合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")
}
为什么?听写结束后,我如何获得通知/调用方法?
好吧,以下是我不使用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
}
}
}