Передача индекса между представлениями таблиц с использованием prepareForSegue не работает - PullRequest
0 голосов
/ 11 мая 2018

Что я пытаюсь сделать:

При нажатии категории в tableViewController 1 соответствующая информация отображается в tableViewController 2

Как я пытаюсь это сделать:

У меня есть свойство var index = 0 в tableViewController 1. index равно indexpath.row

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    index = indexPath.row
    print("Button tapped\(index)")
}

У меня есть prepareForSegue, который передает index в tableViewController 2. У tableViewController 2 также есть свойство с именем var index = 0. Я делаю subjectDetailTableViewController.index (индекс tableViewController 2) = tableViewController 1 index

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if let subjectDetailTableViewController = segue.destination as? SubjectDetailsTableViewController {
        // make the indexes equal between view controllers
        subjectDetailTableViewController.index = index
    }
}

Далее, метод viewWillAppear tableViewController2 использует новое значение index, чтобы определить, как загрузить ячейки

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

    // Determine the subject tapped, then correspond with the correct information

    if index == 0 {
        loadAnatomy()
    } else
        if index == 1 {
            loadFormulas()
        } else
            if index == 2 {
                loadHemodynamics()
            } else
                if index == 3 {
                    loadProcedures()
                } else
                    if index == 4 {
                        loadRadiology()
    }
}

Таким образом, если пользователь касается ячейки с именем ANATOMY (которая является indexPath.row number 0) в tableViewController1, метод loadAnatomy() заполнит ячейки tableViewController 2 информацией ANATOMY

T проблема:

Это не всегда работает. Кажется, это на шаг позади. Если я коснусь другой категории, то есть ФОРМУЛ (то есть indexPath.row номер 1), он загрузит анатомию. Затем, если я вернусь к tableViewController 1 и нажму FORMULAS во второй раз, он будет работать правильно.

Мне показалось, что оператор if находится в неправильном месте, поэтому я переместил его из метода viewDidLoad tableViewController 2 в метод viewWillAppear. Но это не исправило это.

Что мне не хватает? Заранее спасибо.

1 Ответ

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

Я обновил свою функцию переопределения с:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let subjectDetailTableViewController = segue.destination as? SubjectDetailsTableViewController {
    // make the indexes equal between view controllers
    subjectDetailTableViewController.index = index
}

}

До:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

    super.prepare(for: segue, sender: sender)

    let indexPath = tableView.indexPathForSelectedRow

    let index = indexPath?.row

    if let subjectDetailTableViewController = segue.destination as? SubjectDetailsTableViewController {
        // make the indexes equal between view controllers
        subjectDetailTableViewController.index = index!
    }

    if let mainViewController = segue.destination as? MainViewController {
        // Do not animate launch when seguing back to Main Menu
        mainViewController.initialLaunch = false
    }

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