iOS8自定义键盘问题

3

我现在正在开发iOS 8自定义键盘扩展程序,但有些问题我无法解决。

首先,我认为UITextInputDelegate方法并没有按照我的预期工作。

这个说法正确吗:当用户长按输入区域时,应该调用selectionWillChange:selectionDidChange:方法吗?每当文本实际更改时,textWillChange:textDidChange:方法都应该被调用吗?

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

其次,我知道playInputClick:方法可以用于在自定义键盘中虚拟键盘点击声音。但是,在iOS 8自定义键盘扩展程序中似乎无法应用。我的应用程序包括一个键盘视图控制器和一个自定义视图,该自定义视图以UIView作为子类添加到此视图控制器中。我的方法是在此自定义视图中声明UIInputViewAudioFeedback委托,将enableInputClicksWhenVisible方法返回为YES,设置调用[[UIDevice currentDevice] playInputClick]的类方法,然后在需要键盘声音的任何位置调用此方法:但它根本不起作用。

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

谢谢


请考虑将此问题拆分为两个单独的问题。 - tar
1
在您在SO上发布的单独问题中回答了您的第一个问题(https://dev59.com/nV8e5IYBdhLWcg3w_-dM)。至于`playInputClick`,它在当前时间点上已被禁用于自定义键盘,您必须使用自定义音频播放。 - Albert Renshaw
@AlbertRenshaw 你用过哪种自定义音频播放方法在KeyboardExtension中获得了成功?我们尝试过的那些似乎在模拟器之外不起作用。 - wxs
@wxs 在gold master发布后的某个时刻,我曾经让它工作过,但是它很卡顿,不过根据你使用的文件类型不同,它已经变得更好了。但是我现在没有那段代码了 /: 很抱歉。但是不要失去希望,因为我可以保证有一种方法可以让它工作,因为我见过它工作 haha,祝你好运!收藏这个链接,一旦你解决了问题,就来和我们分享答案吧! - Albert Renshaw
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)
        }
}

注意:只有当键盘开启了完全访问权限时,此功能才有效。因此,在调用之前最好测试是否已开启完全访问权限,否则键盘可能会出现长时间的暂停。


0
针对第二个问题,请尝试使用AudioServicesPlaySystemSound函数。
#define PRESS_KEY_DEFAULT_SOUND_ID 1104

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接