Кнопка в UICollectionViewCell издает звук клавиатуры при нажатии - PullRequest
0 голосов
/ 07 мая 2018

У меня есть подкласс UICollectionViewCell (CustomCell), который содержит один UIButton (button), который я хочу воспроизводить при нажатии. В частности, я хочу, чтобы звуки клавиш клавиатуры воспроизводились, когда переменная isOn превращается в true, и звуки возврата (или удаления) клавиатуры, когда переменная isOn превращается в false.

Пока у меня есть следующее:

class CustomCell: UICollectionViewCell {

    private var isOn = true

    @IBOutlet weak private var button: UIButton! {
        didSet {
            button.addTarget(self, action: #selector(self.toggleButton), for: .touchUpInside)
        }
    }

    @objc private func toggleButton() {
        if (isOn) {
            /// Play keyboard backspace (delete) sound ...
            UIDevice.current.playInputClick()
        } else {
            /// Play keyboard text sound ...
            UIDevice.current.playInputClick()
        }
        isOn = !isOn
    }

}

Я также реализую протокол UIInputViewAudioFeedback следующим образом:

extension CustomCell: UIInputViewAudioFeedback {
    func enableInputClicksWhenVisible() -> Bool {
        return true
    }
}

Однако при нажатии кнопки звук не воспроизводится.

Спасибо за любую помощь.

Ответы [ 2 ]

0 голосов
/ 07 мая 2018

Для полноты используйте принятый ответ и оригинальный вопрос:

import AudioToolbox
import UIKit

enum SystemSound: UInt32 {

    case click = 1123
    case delete = 1155
    case modifier = 1156

    func play() {
        AudioServicesPlaySystemSound(self.rawValue)
    }

}

class CustomCell: UICollectionViewCell {

    private var isOn = true

    @IBOutlet weak private var button: UIButton! {
        didSet {
            button.addTarget(self, action: #selector(self.toggleButton), for: .touchUpInside)
        }
    }

    @objc private func toggleButton() {
        isOn = !isOn
        let systemSound: SystemSound = (isOn) ? .click : .modifier
        systemSound.play()
    }

}
0 голосов
/ 07 мая 2018

Для воспроизведения звуков букв клавиатуры: -

enum SystemSound: UInt32 {

    case pressClick    = 1123
    case pressDelete   = 1155
    case pressModifier = 1156

    func play() {
        AudioServicesPlaySystemSound(self.rawValue)
    }

}

Найдите правильные детали звука здесь также .

Итак, замените UIDevice.current.playInputClick() на AudioServicesPlaySystemSound(systemSoundsID)

...