Отключите все кнопки UIB в UITableViewCell после нажатия отдельной кнопки UIB - PullRequest
0 голосов
/ 17 мая 2018

Проблема Я нашел несколько вопросов, спрашивающих, как отключить определенную кнопку ячейки в табличном представлении, но я хочу отключить все экземпляры кнопки в ячейке табличного представления, когда другойнажата кнопка.

Подробности У меня есть табличное представление, в котором отображается список упражнений и количество повторений в пользовательской ячейке.В пользовательской ячейке также есть кнопка «поменять», которая позволяет пользователю поменять упражнение на другое до начала тренировки.

Когда пользователь нажимает кнопку «начать тренировку» (которая запускает таймер), я хочуотключите все экземпляры кнопки свопинга (выделите их серым цветом и сделайте невозможными клики).

Код

Мой класс ячеек тренировки находится здесь:

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 голосов
/ 17 мая 2018

1 - при подключении

@IBOutlet weak var exerciseName: UILabel!

создать выход для каждого btn

@IBOutlet weak var btn1: UIButton!

2 - добавить свойство в массив модели в VC для хранения состояния каждой ячейки

3- Когда вы щелкаете по основному btn, запускается метод делегата с ячейкой btn

4 - В VC метод дескриптора делегата отключает btns и изменяет состояние пути индекса массива

5 - Не забудьте проверить состояние в cellForRow

0 голосов
/ 17 мая 2018

Вы довольно близко. Во-первых, я предлагаю вам быть более конкретным и иметь необходимые данные в ячейке и использовать контроль доступа:

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
}
0 голосов
/ 17 мая 2018

Добавьте свойство в ваш viewcontroller:

var swapButtonsDisabled : Bool = false

В вашем cellForRow сделайте что-то вроде этого:

cell.swapButton.isEnabled = !self.swapButtonsDisabled

Когда кнопка пуска нажата, установите swapButtonDisabled в true и перезагрузитеTableview.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...