【问题标题】:Button to replace a switch按钮更换开关
【发布时间】:2026-02-06 15:20:15
【问题描述】:

我有一个由颜色列表组成的表格视图控制器。我希望用户能够为他或她最喜欢的颜色加注星标。我目前正在使用开关来做到这一点,但我想要一些更具视觉吸引力的东西。我认为一个按钮可能会起作用。但是,我希望按钮具有与开关相似的属性(例如:isOn 属性)。我该怎么做?

【问题讨论】:

    标签: ios swift button click uiswitch


    【解决方案1】:

    UIButtons 还有类似开关的功能

    在 IB 中,在 Interface Builder 中为“Selected State Configuration”设置不同的图像。

    然后,将其添加到按钮的@IBAction 中(其中“按钮”是按钮的名称):

    self.button.selected = !self.button.selected
    

    【讨论】:

    • 我问这个问题后才意识到这一点。这是最简单的解决方案和公认的答案。
    【解决方案2】:

    这就是存在子类化的原因。这是一个未经测试的示例:

    class StarButton : UIButton {
    
        override var isSelected: Bool {
    
            willSet {
    
                let image = UIImage(named: newValue ? "FilledStar" : "EmptyStar")
                self.setImage(image, for: .normal)
            }
        }
    }
    

    【讨论】:

      【解决方案3】:

      您可以使用 tableviewcell 的 accessoryType 属性。您可以将其设置为 .checkmark

      func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
          tableView.cellForRow(at: indexPath)?.accessoryType = .checkmark
      }  
      

      这将如下图所示

      【讨论】: