Подтвердить что ты не робот

Как воспроизводить звук нажатия клавиш на пользовательской клавиатуре?

Я создал пользовательскую клавиатуру с 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);

Как я могу?

4b9b3361

Ответ 1

Попробуйте следующее:

[[UIDevice currentDevice] playInputClick];

Обратите внимание, что

Используйте этот метод для воспроизведения стандартной системной клавиатуры, нажатой в ответ к пользователю, нажав на пользовательский вход или вид аксессуаров клавиатуры. нажмите кнопку воспроизведения только в том случае, если пользователь включил нажатия клавиш в настройках > Звучит, и только если вид ввода сам включен и виден.

Чтобы включить пользовательский ввод или дополнительный вид для входных кликов, выполните следующие два шага:

Принять протокол UIInputViewAudioFeedback в классе ввода. Внедрите метод enableInputClicksWhenVisible delegate для возврата ДА.

Ответ 2

Не удалось заставить это работать, но это сработало для меня:

#import <AudioToolbox/AudioToolbox.h>

AudioServicesPlaySystemSound(1104);

Но все же мне пришлось подклассифицировать UIButton и добавить к нему протокол UIInputViewAudioFeedback.

Ответ 3

В Swift добавьте расширение для представления ввода следующим образом:

extension UIInputView : UIInputViewAudioFeedback {

    public var enableInputClicksWhenVisible: Bool {
        return true
    }

}

В методе действий для ваших кнопок вызывается следующая функция:

    UIDevice.current.playInputClick()

Добавьте в свой info.plist следующее свойство:

NSExtension | NSExtensionAttributes | RequestsOpenAccess = YES