当前模型退出时间时快速传递数组值

时间:2019-02-17 04:34:41

标签: ios swift uitabbarcontroller

我的场景是,我有三个tabbar和第一个viewcontroller的{​​{1}}并显示tabbar和一些tableview的视图控制器。每当我点击data tableview时,我都会将数据传递给一个特殊的cell popupcontroller。如果我model弹出控制器,则需要直接显示到选项卡dismiss(我的意思是第二秒index 1)也需要传递viewcontroller

在这里,我尝试过以下代码

  1. 选择tableview单元格后,将值传递给popupview控制器
  2. 单击弹出窗口关闭按钮可将相同的值传递给标签栏索引1(标签栏第二个ViewController)

内部弹出视图控制器

values

一旦弹出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(索引0)tabbar,所以我添加了viewcontroller来调用函数并更改索引。

2 个答案:

答案 0 :(得分:2)

首先,您不需要使用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

有关更多信息,您可以参考THIS演示项目。

编辑:

因此,从您的代码中,我看到您已将导航控制器嵌入到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
    })
}

答案 1 :(得分:0)

您可以使用dismiss方法的完成处理程序。

 dismiss(animated: true, completion: nil)

通过传递一种方法将Tab栏更改为第二个选项卡,而不是传递nil。

disview视图控制器中的完成处理程序在视图控制器的关闭完成时被调用。

viewController.dismissViewControllerAnimated(true, completion: {
            FunctionToChangeToSecondTab()
        })