Swift 4 在 UITableViewCell 中禁用 UIButton 的正确方法

Swift 4 Correct way of disabling a UIButton in UITableViewCell

我需要知道如何正确禁用 TableViewCell 中的按钮,以便在触摸禁用按钮区域时单元格不会被选中?现在我可以看到禁用的按钮,所以如果用户尝试触摸变灰的按钮,该行将被选中而不是什么都没有发生!我看了很多,但网络上充满了关于禁用按钮的不相关回答,而且没有人谈论 tableviewcells 的问题。

由于按钮在禁用后不再接收任何触摸事件,因此解决方案可能不是实际禁用按钮而是伪造它。

您可以创建一个变量来维护按钮的状态:

var isEnabled: Bool = true {
    didSet {
        if !isEnabled {
            button.setTitleColor(UIColor.gray, forState: .normal)
        } else {
            //Set the color back to the original value
            button.setTitleColor(UIColor.black, forState: .normal)
        }
    }
}

每当 isEnabled 设置为 false 时,这将使按钮标题变灰。

然后,在您的操作方法中,您在开头插入一行用于早期 return:

func buttonClicked(sender: UIButton) {
    if !isEnabled {
        return
    }
    // Otherwise, handle click event
}

这样一来,按钮就可以点击,但在禁用时不会执行任何操作,因此不应选择该单元格。