iOS8自定义键盘问题

时间:2014-08-06 03:56:47

标签: ios keyboard ios8 ios-app-extension custom-keyboard

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

首先,我认为UITextInputDelegate方法无法正常工作。

听起来是否正确:当用户长按打字区域时,应调用selectionWillChange:selectionDidChange:方法?只要文本字面改变,就应该调用textWillChange:textDidChange:方法?

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

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

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

谢谢

2 个答案:

答案 0 :(得分:6)

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

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

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

答案 1 :(得分:0)

对于第二个问题,请尝试AudioServicesPlaySystemSound

#define PRESS_KEY_DEFAULT_SOUND_ID 1104

- (void)playPressKeySound {
    if (self.openPressSound) {
        AudioServicesPlaySystemSound(PRESS_KEY_DEFAULT_SOUND_ID);
    }
}