Невозможно передать данные между TableViewControllers - PullRequest
0 голосов
/ 25 декабря 2018

С Рождеством!В данный момент я делаю приложение для напоминаний.Мои «вторичные» TableViews не могут передать данные обратно в «основной» TableView.(пожалуйста, смотрите изображение ниже).Мне нужно, чтобы данные передавались обратно в «основной» TableView, чтобы я мог сохранить его и отобразить в другом TableView, чтобы пользователь мог видеть поставленные им задачи.

My Storyboard, segue names in Red

Код внутри IconTableViewController (и ShowTableViewController):

var userImage: String = ""
var userTitle: String = ""
var userDesc: String = ""
var frequency: String = ""

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

    if let navigationViewController = segue.destination as? UINavigationController {

        guard let viewController = navigationViewController.topViewController as? NewItemTableViewController else { return }

        let userImageNew = userImage
        let userTitleOld = userTitle
        let userDescOld = userDesc
        let frequencyOld = frequency

        viewController.selectedImage = userImageNew
        viewController.userTitle = userTitleOld
        viewController.userDesc = userDescOld
        viewController.selectedFrequency = frequencyOld
    }
}

Код внутри NewItemTableViewController:

var selectedImage: String = ""
var selectedFrequency: String = ""
var userTitle: String = ""
var userDesc: String = ""

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "showSelect" {
        let userImageOld = selectedImage
        let userTitleNew = titleTextField.text
        let userDescNew = descTextView.text
        let frequencyOld = selectedFrequency

        let viewController = segue.destination as! ShowTableViewController
        viewController.userImage = userImageOld
        viewController.userTitle = userTitleNew!
        viewController.userDesc = userDescNew!
        viewController.frequency = frequencyOld
    }

    if segue.identifier == "iconSelect" {
        let userImageOld = selectedImage
        let userTitleNew = titleTextField.text
        let userDescNew = descTextView.text
        let frequencyOld = selectedFrequency

        let viewController = segue.destination as! IconTableViewController
        viewController.userImage = userImageOld
        viewController.userTitle = userTitleNew!
        viewController.userDesc = userDescNew!
        viewController.frequency = frequencyOld
    }
}

Большое спасибо за вашу помощь!

Ответы [ 2 ]

0 голосов
/ 25 декабря 2018

Похоже, NewItemTableViewController еще не топ viewController в стеке навигации.Попробуйте получить к нему доступ таким же тривиальным способом:

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

    if let viewController = segue.destination as? NewItemTableViewController {

        let userImageNew = userImage
        let userTitleOld = userTitle
        let userDescOld = userDesc
        let frequencyOld = frequency

        viewController.selectedImage = userImageNew
        viewController.userTitle = userTitleOld
        viewController.userDesc = userDescOld
        viewController.selectedFrequency = frequencyOld
    }
}

. Вы должны поставить точку останова внутри метода prepare(for segue и посмотреть, вызывается ли он.Потому что я чувствую, что у вас нет unwind segue, поскольку эти viewControllers просто помещены в стек навигации.Таким образом, в этом случае вы также можете использовать viewWillDisappear для установки данных путем доступа к NewItemTableViewController из стека навигации.Что-то, как показано ниже,

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

    if let vc = self.navigationController?.viewControllers.first(where: { $0 is NewItemTableViewController }) as? NewItemTableViewController {
        // Set data.
    }
}
0 голосов
/ 25 декабря 2018

Вы должны использовать Delegate, чтобы вернуть данные обратно к NewItemTableViewController.Вы можете сослаться на эту тему: Передача данных назад к предыдущему viewcontrolle

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