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

Ios 按下单独的UIButton后,禁用UITableViewCell中的所有UIButton,ios,swift,uitableview,swift4,Ios,Swift,Uitableview,Swift4,问题我发现一些问题询问如何禁用表视图中的特定单元格按钮,但我想做的是在按下另一个按钮时禁用表视图单元格中按钮的所有实例 详细信息我有一个表格视图,在自定义单元格中显示练习列表和重复次数。在自定义单元格中还有一个“交换”按钮,允许用户在训练开始前将一项训练交换为另一项训练 当用户点击“开始训练”(触发计时器)时,我想禁用交换按钮的所有实例(将它们全部灰显并使其不可点击) 代码 我的训练单元课程在这里: class WorkoutCell : UITableViewCell { var d

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

详细信息我有一个表格视图,在自定义单元格中显示练习列表和重复次数。在自定义单元格中还有一个“交换”按钮,允许用户在训练开始前将一项训练交换为另一项训练

当用户点击“开始训练”(触发计时器)时,我想禁用交换按钮的所有实例(将它们全部灰显并使其不可点击)

代码

我的训练单元课程在这里:

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添加到重复单元格中,所以我有点卡住了


我是一个相当新的代表(设法让它工作,以显示表视图),所以如果它有一些简单的事情做,对不起

向viewcontroller添加属性:

var swapButtonsDisabled : Bool = false
在你的牢房里,做这样的事情:

cell.swapButton.isEnabled = !self.swapButtonsDisabled

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

向viewcontroller添加属性:

var swapButtonsDisabled : Bool = false
在你的牢房里,做这样的事情:

cell.swapButton.isEnabled = !self.swapButtonsDisabled
按下“开始”按钮时,将swapButtonDisabled设置为true,然后重新加载tableView。

1-连接时

@IBOutlet weak var exerciseName: UILabel!
为每个btn创建出口

@IBOutlet weak var btn1: UIButton!
2-将属性添加到VC中的模型数组中,以保存每个单元格的状态

3-单击主btn时,使用btn的单元格激发委托方法

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

5-连接时,不要忘记检查cellForRow中的状态

@IBOutlet weak var exerciseName: UILabel!
为每个btn创建出口

@IBOutlet weak var btn1: UIButton!
2-将属性添加到VC中的模型数组中,以保存每个单元格的状态

3-单击主btn时,使用btn的单元格激发委托方法

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


5-别忘了检查cellForRow的状态

你已经很接近了。首先,我建议您更具体一些,将所需数据放在单元格中,并使用访问控制:

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
}

你很接近。首先,我建议您更具体一些,将所需数据放在单元格中,并使用访问控制:

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
}

您可以在此处使用通知,在每个单元格中添加观察者,在按下按钮时发布通知。通过这种方式,您可以禁用tableview单元格中的所有按钮。您可以使用此处通知、在每个单元格中添加观察者、在按下按钮时发布通知。通过这种方式,您可以禁用tableview单元格中的所有按钮。这将对所有单元格进行更改。正如我对问题的解释,当按下开始按钮时,nc14希望在所有单元格中禁用交换按钮。对于那些跟随的人。。。。这对我来说是最简单的解决办法,但需要稍加修改。首先,连接按钮的UILabel的正确位置在类的protocol部分(与button函数相同)。然后,我就可以在cellForRow部分中简单地使用cell.swapButton.isEnabled=swapButtonDisabled(不需要self或!需要)。然后我可以使用其他功能将按钮设置为相应的启用/禁用)这将对所有单元格进行更改。正如我对问题的解释,当按下开始按钮时,nc14希望在所有单元格中禁用交换按钮。对于那些跟随的人。。。。这对我来说是最简单的解决办法,但需要稍加修改。首先,连接按钮的UILabel的正确位置在类的protocol部分(与button函数相同)。然后,我就可以在cellForRow部分中简单地使用cell.swapButton.isEnabled=swapButtonDisabled(不需要self或!需要)。然后我可以使用其他功能将按钮设置为相应的启用/禁用)