[英]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.