3

我现在正在开发 iOS 8 自定义键盘扩展,并且有一些我无法弄清楚的问题。

首先,我认为这些UITextInputDelegate方法没有像我预期的那样工作。

这听起来对吗:当用户长按输入区域selectionWillChange:selectionDidChange:应该调用方法?每当文本发生变化时,都应该调用textWillChange:and方法?textDidChange:

实际上,我观察到的是,当我在文本输入区域中更改选择textWillChange:并被textDidChange:调用时,我无法知道其他两种方法是在什么条件下调用的。如果有人知道这些委托方法的用法,请告诉我。

其次,我知道该playInputClick:方法可用于在自定义键盘中虚拟化键盘点击声音。由于这适用于正常情况,我发现无法在 iOS 8 自定义键盘扩展中应用。我的应用由一个键盘视图控制器组成,子类 UIView 的自定义视图被添加到这个视图控制器中。我的方法是UIInputViewAudioFeedback在这个自定义视图中声明委托, enableInputClicksWhenVisible 方法正在返回YES,设置调用[[UIDevice currentDevice] playInputClick]的类方法,然后在需要键盘声音的地方调用此方法:这根本不起作用。

我的方法有任何错误吗?如果有人成功使用playInputClick方法,请分享您的智慧。

谢谢

4

2 回答 2

6

最好在队列中播放音频,而不是在 UI 键处理程序中

func playPressKeySound() {
    let PRESS_KEY_DEFAULT_SOUND_ID: SystemSoundID = 1104
    dispatch_async(dispatch_get_main_queue()) {
            AudioServicesPlaySystemSound(PRESS_KEY_DEFAULT_SOUND_ID)
        }
}

注意:这仅在键盘打开了完全访问权限时才有效,因此最好在调用之前测试是否有完全访问权限,否则键盘可能会长时间暂停。

于 2014-11-05T03:29:42.720 回答
0

对于第二个问题,尝试 AudioServicesPlaySystemSound

#define PRESS_KEY_DEFAULT_SOUND_ID 1104

- (void)playPressKeySound {
    if (self.openPressSound) {
        AudioServicesPlaySystemSound(PRESS_KEY_DEFAULT_SOUND_ID);
    }
}
于 2014-10-07T01:01:49.560 回答