[英]Disable all UIButtons in UITableViewCell once a separate UIButton is pressed
问题我发现了一些问题,询问如何在表格视图中禁用特定的单元格按钮,但是我想做的是在按下另一个按钮时禁用表格视图单元格中按钮的所有实例。
详细信息我有一个表视图,该视图在自定义单元格中显示练习列表和重复次数。 在自定义单元格中还有一个“交换”按钮,允许用户在锻炼开始之前将一项锻炼交换为另一项锻炼。
当用户点击“开始锻炼”(触发计时器)时,我想禁用交换按钮的所有实例(将它们全部变灰,使它们不可单击)。
码
我的健身室课程在这里:
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添加到重复的单元格中,所以我有点卡住了。
我对代表来说还很陌生(设法使它能够显示表视图),所以对不起,如果有一些简单的事情!
向您的视图控制器添加属性:
var swapButtonsDisabled : Bool = false
在您的cellForRow中执行以下操作:
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委托句柄方法中,禁用btns并更改数组索引路径的状态
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
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.