如何在自定义键盘中播放键盘点击声音?

17

我创建了一个使用UIView的自定义键盘。 然而,我没有听到键盘的点击声音。 我尝试了下面的代码,但是我什么也听不到。 如何播放键盘的点击声音?

NSURL* musicFile = [NSURL fileURLWithPath:[[NSBundle mainBundle] 
                                               pathForResource:@"Tock"
                                               ofType:@"aiff"]];
    AVAudioPlayer *click = [[AVAudioPlayer alloc] initWithContentsOfURL:musicFile error:nil];
    [click setVolume:0.15f];
    [click play];

我也尝试了这个:

AudioServicesPlaySystemSound(0x450);

我该如何实现这个功能?

4个回答

35

试试这个:

[[UIDevice currentDevice] playInputClick];

请注意:

使用此方法来播放标准系统键盘点击声以响应用户在自定义输入或键盘辅助视图中的点击。仅当用户在“设置” > “声音”中启用了键盘点击声,并且输入视图本身已启用和可见时,才会播放声音。

要为输入点击启用自定义输入或辅助视图,请执行以下两个步骤:

在您的输入视图类中采用UIInputViewAudioFeedback协议。实现enableInputClicksWhenVisible委托方法并返回YES。


7
我遵循了指示,但是我的键盘没有发出点击声。系统键盘的点击声可以听到。 - iOS Dev

6

在Swift中,可以添加一个输入视图的扩展,如下所示:

extension UIInputView : UIInputViewAudioFeedback {

    public var enableInputClicksWhenVisible: Bool {
        return true
    }

}

在您的按钮操作方法中调用以下函数:
    UIDevice.current.playInputClick()

请将以下属性添加到您的info.plist文件中:

NSExtension | NSExtensionAttributes | RequestsOpenAccess = YES

该属性可以打开应用程序的访问权限。

即使我们从“手机设置”中禁用键盘声音,它仍会播放声音,有什么解决办法吗? - Kiran P Nair
据我回忆,它是可以工作的,但这是一个缓存问题。如果您在更改设置后重新启动设备,它将生效。 - Litehouse

6

我试了很多方法都不行,但是这个方法对我有效:

#import <AudioToolbox/AudioToolbox.h>

AudioServicesPlaySystemSound(1104);

但是我仍然需要子类化 UIButton 并添加 UIInputViewAudioFeedback 协议。


这个方法可行。我甚至不需要添加UIInputViewAudioFeedback协议。但它无法遵循键盘点击声音的系统设置。我使用的是iOS 11。 - Chuck Boris

1
对于 Swift,实际上有一种非常简单的方法来播放键盘音效。
首先:
import AudioToolbox

然后在需要声音效果时使用它。保留HTML格式。
AudioServicesPlaySystemSound(0x450)

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