Быстрая передача значений массива, когда текущая модель отбрасывает время - PullRequest
0 голосов
/ 17 февраля 2019

Мой сценарий, у меня tabbar с тремя viewcontroller и первым tabbar viewcontroller. Я показываю tableview с некоторыми data.Всякий раз, когда я нажимаю tableview cell, я передаю данные одному специальному model всплывающему контроллеру.Если у меня dismiss всплывающий контроллер, мне нужно показать прямо на вкладке index 1 (я имею в виду второй вкладки viewcontroller) также необходимо передать values.

Здесь, ниже код, который я пытался

  1. После выбора значений ячейки табличного представления, передаваемых в контроллер всплывающих окон
  2. Нажатие кнопки закрытия всплывающего окна, чтобы передать то же значение в индекс панели вкладок 1 (второй видовой контроллер табуляции)

Внутриконтроллер всплывающих окон

var item : Datum! //Datum Codable Root

@IBAction func close_click(_ sender: Any) {
    NotificationCenter.default.post(name: Notification.Name(rawValue: "disconnectPaxiSocket"), object: nil)
    if let presenter = presentingViewController as? HomeViewController {
           presenter.updatitem = item
    }
    dismiss(animated: true, completion: nil)
 }

После всплывающего окна dismissed отображается tabbar first viewcontroller (index 0), поэтому я добавил NotificationCenter для вызова функции и изменения индекса.

Ответы [ 2 ]

0 голосов
/ 17 февраля 2019

Прежде всего вам не нужно использовать NotificationCenter для этого, потому что вы можете просто достичь этого, передав объект UITabBarController в контроллер следующего представления, когда вы выбираете любую ячейку в tableView, как показано ниже:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

    let vc = self.storyboard?.instantiateViewController(withIdentifier: "DetailViewController") as! DetailViewController
    vc.selectedIndex = indexPath.row
    vc.tabBar = self.tabBarController
    self.present(vc, animated: true, completion: nil)
}

и вам нужно объявить var tabBar: UITabBarController? в DetailViewController, в котором будет храниться значение, переданное предыдущим контроллером представления.

Затем, когда вы закрываете контроллер представления, вы можете просто выбрать другой индексUITabBarController с self.tabBar?.selectedIndex = 1, и вы можете просто передать значение в первый контроллер представления индекса, например:

@IBAction func close_click(_ sender: Any) {
    dismiss(animated: true, completion: {

        if let secondTab = self.tabBar?.viewControllers?[1] as? SecondViewController {
            secondTab.selectedIndexFromFirstTab = self.selectedIndex
            secondTab.tfData = self.userTF.text!
        }
        self.tabBar?.selectedIndex = 1
    })
}

, и вам нужно объявить объекты в SecondViewController, например:

var selectedIndexFromFirstTab = 0
var tfData = ""

Который будет содержать данные предыдущего представления.

Теперь ваш результат будет выглядеть следующим образом:

enter image description here

Для получения дополнительной информации вы можетесм. ЭТОТ демонстрационный проект.

РЕДАКТИРОВАТЬ:

Итак, из вашего кода я увидел, что вы встроили навигационные контроллеры в tabBarконтроллеры, поэтому вам нужно обновить close_click метод, как показано ниже:

@IBAction func close_click(_ sender: Any) {
    dismiss(animated: true, completion: {

        if let navView = self.tabBar?.viewControllers?[1] as? UINavigationController {
            if let secondTab = navView.viewControllers[0] as? HomeViewController {
                secondTab.selectedIndexFromFirstTab = self.selectedIndex
                secondTab.item = self.item
                secondTab.tfData = "Sample"
            }
        }
        self.tabBar?.selectedIndex = 1
    })
}
0 голосов
/ 17 февраля 2019

Вы можете использовать обработчик завершения метода dismiss.

 dismiss(animated: true, completion: nil)

Вместо передачи nil, передайте метод для изменения панели вкладок на вторую вкладку.

Обработчик завершения вконтроллер dismiss view вызывается после завершения удаления контроллера view.

viewController.dismissViewControllerAnimated(true, completion: {
            FunctionToChangeToSecondTab()
        })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...