UICollectionViewCell 中的按钮在单击时发出键盘声音

Posted

技术标签:

【中文标题】UICollectionViewCell 中的按钮在单击时发出键盘声音【英文标题】:Button in UICollectionViewCell Makes Keyboard Sound When Clicked 【发布时间】:2018-05-07 10:58:08 【问题描述】:

我有一个 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
    

但是,按下按钮时没有声音。

感谢您的帮助。

【问题讨论】:

您的代码不起作用,因为它仅在符合UIInputViewAudioFeedback 的视图是文本字段或文本视图的inputView 时才起作用。 【参考方案1】:

播放键盘字母的声音:-

enum SystemSound: UInt32 

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

    func play() 
        AudioservicesPlaySystemSound(self.rawValue)
    


找到合适的声音细节here also。

所以,将UIDevice.current.playInputClick() 替换为AudioServicesPlaySystemSound(systemSoundsID)

【讨论】:

非常感谢。这可行,但您还必须import AudioToolbox【参考方案2】:

为了完整性,使用接受的答案和原始问题:

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()
    


【讨论】:

以上是关于UICollectionViewCell 中的按钮在单击时发出键盘声音的主要内容,如果未能解决你的问题,请参考以下文章

UITableViewCell 中的 UICollectionViewCell 中的按钮点击操作

UICollectionViewCell 中的 Swift 3 按钮不响应触摸

为啥向 UICollectionViewCell 中的按钮添加操作效果不佳?

UICollectionViewCell 中的按钮在单击时发出键盘声音

Swift 4 - 如何从嵌套在 UICollectionViewCell 中的按钮以编程方式激活 segue

带有 UIButton 单选按钮的 UICollectionViewCell - 一次选择一个单选按钮