iOS8 自定义键盘问题

Posted

技术标签:

【中文标题】iOS8 自定义键盘问题【英文标题】:iOS8 custom keyboard issues 【发布时间】:2014-08-06 03:56:46 【问题描述】:

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

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

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

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

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

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

谢谢

【问题讨论】:

考虑将其拆分为两个单独的问题。 回答了您在 SO (***.com/q/25158161/2057171) 上发布的单独问题中的第一个问题。至于playInputClick,此时自定义键盘已禁用,您必须使用自定义音频播放。 @AlbertRenshaw 您在 KeyboardExtension 中使用哪种自定义音频播放方法取得了成功?我们尝试过的那些似乎无法在模拟器之外工作。 @wxs 在黄金大师发布后,我曾一度让它工作,它有点滞后,但根据您使用的文件类型,它会变得更好,但我不再有代码/:我'对不起。但是不要失去希望,有一种方法我可以保证它,因为我已经看到它起作用了哈哈,祝你好运!将此链接添加为书签,并在您弄清楚后与我们分享答案! 【参考方案1】:

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

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

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

【讨论】:

【参考方案2】:

第二个问题,试试 AudioServicesPlaySystemSound

#define PRESS_KEY_DEFAULT_SOUND_ID 1104

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

【讨论】:

以上是关于iOS8 自定义键盘问题的主要内容,如果未能解决你的问题,请参考以下文章

无法启用 iOS8 自定义键盘

如何检查我的 ios8 自定义键盘扩展是不是具有开放访问权限?

iOS8 自定义键盘 Settings.bundle 不显示

设备上的 iOS 8 自定义键盘

无法在 iOS8 自定义键盘中获得约束

如何检查我的ios8自定义键盘扩展是否具有开放访问权限?