按下单独的UIButton后,禁用UITableViewCell中的所有UIButton

时间:2018-05-17 09:31:50

标签: ios swift uitableview swift4

问题我发现了一些问题,询问如何禁用表格视图中的特定单元格按钮,但我想要做的是禁用表格视图单元格中按钮的所有实例按下另一个按钮。

详细信息我有一个表格视图,其中显示了自定义单元格中的练习列表和代表数量。在自定义单元格内还有一个“交换”按钮,允许用户在锻炼开始前将练习换成另一个练习。

当用户点击“开始锻炼”(触发计时器)时,我想要禁用所有交换按钮的实例(将它们全部灰化并使其无法点击)。

代码

我的训练细胞课在这里:

class WorkoutCell : UITableViewCell {

    var delegate: WorkoutCellDelegate?

    @IBAction func swapButtonPressed(_ sender: Any) {
        delegate?.swapButtonTapped(cell: self)
    }

    @IBOutlet weak var exerciseName: UILabel!
    @IBOutlet weak var repsNumber: UILabel!
    }
    protocol WorkoutCellDelegate {

        func swapButtonTapped(cell: WorkoutCell)

        }

我尝试了什么

我想这样做的方法是为按钮添加一个IBOutlet(例如'swapButton')然后简单地执行以下操作:

   @IBAction func startButtonPressed(_ sender: UIButton) {
       WorkoutCell.swapButton.isenabled = false
    }

但是Xcode不允许你将IBOutlets添加到重复单元格中,所以我有点卡住了。

我对代表来说相当新手(设法让它显示表格视图)所以如果它有一些简单的事情可以做对不起!

3 个答案:

答案 0 :(得分:1)

向viewcontroller添加属性:

var swapButtonsDisabled : Bool = false

在你的cellForRow中做这样的事情:

cell.swapButton.isEnabled = !self.swapButtonsDisabled

按下开始按钮时,将swapButtonDisabled设置为true并重新加载tableView。

答案 1 :(得分:1)

1-连接时

@IBOutlet weak var exerciseName: UILabel!

为每个btn创建出口

@IBOutlet weak var btn1: UIButton!

2-将属性添加到VC中的模型数组以保存每个单元格的状态

3-单击主btn时,使用btn的单元格

激活委托方法

4-在VC委托句柄方法中禁用btns并更改数组索引路径的状态

5-不要忘记在cellForRow中检查状态

答案 2 :(得分:1)

你非常接近。首先,我建议您更具体,并在单元格中使用您需要的数据并使用访问控制:

class WorkoutCell : UITableViewCell {

    var workoutSwappable: (workout: Workout, canBeSwapped: Bool)? {
       didSet {
           swapButton.isEnabled = workoutSwappable?.canBeSwapped == true
           // TODO: do additional setup here
       }
    }

    weak var delegate: WorkoutCellDelegate? // Needs to be weak or you will have memory leaks

    @IBAction private func swapButtonPressed(_ sender: Any) {
        if let workoutSwappable = workoutSwappable, workoutSwappable.canBeSwapped == true {
            delegate?.workoutCell(self, didTapWorkoutSwap: workoutSwappable.workout)
        }
    }

    @IBOutlet private var exerciseName: UILabel!
    @IBOutlet private var repsNumber: UILabel!
    @IBOutlet private var swapButton: UIButton!
    }

好的,现在在索引路径的行的单元格中,您只需要:

cell.workoutSwappable = (self.items[0], self.canSwap)

在委托上你现在有:

func workoutCell(_ sender: WorkoutCell, didTapWorkoutSwap workout: workout) {
    self.currentWorkout = workout
    self.canSwap = false
    self.initializeTimer()
    tableView.reloadData() // This will now flush all the buttons
}