Потеря идентификатора строки в табличном представлении перед передачей данных - PullRequest
2 голосов
/ 26 сентября 2019

У меня есть контроллер навигации, встроенный в VC, который называется UserDashboardVC.Затем у меня есть VC меню, и одна опция открывает другой VC с табличным представлением, ManageAccountVC.Когда я выбираю строку таблицы, мне бы хотелось, чтобы она развернулась и заполнила данные на UserDashboardVC.

Я изо всех сил пытаюсь передать данные обратно в UserDashboardVC с помощью функции отката от ManageAccountVC.

В моем UserDashboardVC (root) у меня есть мой код размотки:

@IBAction func unwindUserDashboardVC(_ unwindSegue: UIStoryboardSegue) {
    userCompanyLabel.text   = PassCompanyOffice}

В моем ManageAccountVC ячейка табличного представления была подключена к Exit unwindUserDashboardVC, это работает, когда я нажимаю на ячейкуЯ раскручиваю UserDashboardVC.У меня есть функция в ManageAccountVC, чтобы получить выбранную строку:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    tableView.deselectRow(at: indexPath, animated: true)
    PassCompanyOffice = userAccountArray[indexPath.row].companyOffice!
}

У меня также есть функция Prepare в ManageAccountVC, которая, кажется, срабатывает, прежде чем я получу значение строки:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        let ConfirmVC = segue.destination as! UserDashboardVC
        ConfirmVC.PassCompanyOffice = PassCompanyOffice
}

Почемувыполняется процедура раскрутки до того, как будет определен ряд клеток?Как мне вернуть мои данные?

Ответы [ 2 ]

1 голос
/ 26 сентября 2019

Вы можете создать члена класса для хранения выбранной строки и назначить его в willSelectRow для представления таблицы.Затем выберите значение при подготовке к Segue или в этом случае.Поместите точку останова в последовательность размотки, чтобы определить состояние выбранной переменной строки перед ее использованием.

Ручной переход

Чтобы отделить действие щелчка ячейки от перехода, необходимо удалить выход.переход от ячейки табличного представления к выходу.

Затем создайте переход вручную от контроллера представления к значку выхода.Присвойте этому идентификатору идентификатор и затем вызовите executeSegue с идентификатором (используя exitSegueIdentifier) ​​

Таким образом, вы разделяете два действия.Вы можете нажать на стол, не выходя.В своей кодовой базе вы можете решить, когда вы хотите вызвать executeSegue и фактически закрыть VC, используя sege ручного выхода.

0 голосов
/ 26 сентября 2019

Как упомянул @Tommie C., моя проблема была с TableViewCell, который был связан с выходом раскадровки.Я удалил этот переход и добавил ручной выход Seguel, выполнив следующее:

enter image description here

Убедитесь, что вышеперечисленное стало идентифицируемым, в данном случае это «loadDashboardSegue»».Функция Prepare имеет имя идентификатора сегмента «loadDashboardSegue»:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "loadDashboardSegue" {
        let ConfirmVC = segue.destination as! UserDashboardVC
        ConfirmVC.PassCompanyOffice = PassCompanyOffice
    }
}

Наконец, вы вручную воздействуете на переход в строке просмотра таблицы:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    tableView.deselectRow(at: indexPath, animated: true)
    PassCompanyOffice = userAccountArray[indexPath.row].companyOffice
    performSegue(withIdentifier:"loadDashboardSegue", sender: self)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...