@bushmaks

Как правильно переназначить значение в функции и передать его в другой класс?

Здравствуйте, у меня есть функция, которая вызывается при нажатии на cell в TableView.
Код функции из TableViewController:
override func tableView(_ tableView: UITableView, didHighlightRowAt indexPath: IndexPath) {
        CreateTodoTableViewCell().selectedProject = indexPath.row
    }


Я хочу передать нажатый indexPath.row в другой класс: CreateTodoTableViewCell

код из класса CreateTodoTableViewCell:
class CreateTodoTableViewCell: UITableViewCell {
    
    private var _selectedProject = -1
    
    var selectedProject:Int {
        set {
            _selectedProject = newValue
        }
        get {
            return _selectedProject
        }
    }

    @IBAction func CreateTodoTextField(_ sender: UITextField) {
            TodoListViewController.sharedInstance.Todos[selectedProject].append(sender.text!)
        }
        
    }


Дело в том, что когда я выбираю нужный мне cell, функция из контроллера изменяет значение, но когда я нажимаю кнопку done, значение восстанавливается на изначальное -1, соответственно и в Todos отправляется индекс -1. Как правильно переназначить значение selectedProject в функции и передать его в другой класс?
  • Вопрос задан
  • 84 просмотра
Решения вопроса 1
@freeg0r
.. some dude ..
Во-первых для отслеживания нажатия на cell используется другой метод, tableView(_:didSelectRowAt:).
Во-вторых, как видно из Вашего кода, вы не совсем понимаете как обращаться с инстансами классов. То есть когда делается CreateTodoTableViewCell().selectedProject = indexPath.row то происходит создание инстанса (обьекта) класса CreateTodoTableViewCell и присваевается какое то значение его переменной selectedProject. А что дальше? Дальше на выходе из функции этот класс удаляется из памяти, и вы где то в другом месте вашего кода вызываете метод другого объекта этого же класса, но у которого selectedProject дифултный, -1. Вам надо в методе didSelectRowAt получить ваш реальный cell, а не создавать его:
if let cell = tableView.cellForRow(at: indexPath) as? CreateTodoTableViewCell {
      cell.selectedProject = indexPath.row
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы