как сохранить кнопку UIButton при последнем нажатии - PullRequest
1 голос
/ 26 января 2020

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

вот функция, которую я хотел бы реализовать


        func setupDateAndTIme(btnCheckMark: UIButton) {

            let elapsedTime = NSDate().timeIntervalSince(habit.updatedAt as Date)
            let duration = Int(elapsedTime)
            let waitingTime = 45
            //change waiting time to 43200 for actual app but test w 60 smtn
            if duration < waitingTime && habit.checked == true {
                btnCheckMark.setBackgroundImage(UIImage(named: "checkedOff"), for: UIControl.State.normal)
                btnCheckMark.isEnabled = false
            } else {
                btnCheckMark.setBackgroundImage(UIImage(named: "emptyCheckbox"), for: UIControl.State.normal)
                btnCheckMark.isEnabled = true
            }

        }


, поскольку я делаю это приложение программно, это функция табличного представления


    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        let cell = tableView.dequeueReusableCell(withIdentifier: "CheckListIdentifier") as! CheckMarkCell

        cell.btnCheckMark.addTarget(self, action: #selector(checkMarkButtonClicked(sender:)), for: .touchUpInside)

        cell.textLabel!.text = "\(myArray[indexPath.row])"
        return cell
    }
   @objc func checkMarkButtonClicked ( sender: UIButton) {
        print("button presed")

        if sender.isSelected {
            //uncheck the butoon
            sender.isSelected = false

        } else {
            // checkmark it
            sender.isSelected = true

        }

    }

вот код для ячейки

class CheckMarkCell: UITableViewCell {
    let habit = Habit()
    @IBOutlet weak var lblTitle: UILabel!
    @IBOutlet weak var btnCheckMark: UIButton!

}

Может кто-нибудь сказать мне, как реализовать эту функцию? благодарю вас!

Ответы [ 2 ]

1 голос
/ 26 января 2020

Если у вас есть несколько ячеек, вам нужен способ отследить, какая из них была последней, поскольку при прокрутке ячейки используются повторно, и вы потеряете эту информацию, есть 2 простых способа выполнить sh то, что вы want

  • Используйте indexPath.row в качестве свойства tag вашей кнопки: в cellForRowAtIndexPath присвойте свойству button tag значение indexPath.row, затем в вашем checkMarkButtonClicked вы можете получить доступ к свойству tag с помощью sender.tag, обновить флаг в вашем массиве.

  • Используйте свойство в вашей viewModel для отслеживания выбора: внутри вашего CheckMarkCell у вас может быть метод configure(with viewModel: habit), и ваш Habit viewModel может иметь свойство isSelected, тогда в вашем viewController у вас есть массив Habit объектов, где вы можете переключать isSelected там.

1 голос
/ 26 января 2020
  1. Добавление слабой ссылки на контроллер представления в ячейку
  2. Вызов какого-либо метода в контроллере представления при нажатии кнопки
  3. Обновление флага, когда кнопка выбрана, например, var selectedIndexes = [Int]() где index - номер строки ячейки с кнопкой
  4. Перезагрузите ячейку в таблице или сразу обновите состояние кнопки.

@objc func checkMarkButtonClicked должен быть частью cell.

Logi c: user --tap--> cell --call_vc.updateButtonState()--> vc [saves flag] --tableView_reloadCell-->

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