将数据从标签栏切换到另一个视图控制器

时间:2017-06-28 17:47:29

标签: swift firebase uinavigationcontroller uitabbarcontroller uistoryboardsegue

问题可能听起来很复杂,所以让我缓解压力*

  • 假设我有2个标签栏标签(Home1,Home2)

  • 两者(Home1,Home2)都有导航控制器,每个控制器有两个视图控制器

  • Home1(导航控制器 - > VC11 - > VC12)

  • Home2(导航控制器 - > VC21 - > VC22)

容易吗?好吧,不太好

我想要做的是将数据从[Home1:VC12传递到Home2:VC22]。

我的编码工作:

tabBarController!.selectedIndex = 1
self.navigationController!.popToViewController(navigationCon‌troller!.viewControl‌​lers[1] as! (Home2: VC22), animated: false)



let navController = self.tabBarController?.viewControllers![1] as! UINavigationController
navController.popToViewController((Home2: VC22) as! UIViewController, animated: true)

for oneView in (self.navigationController?.viewControllers)! {
    if (oneView.isKind(of: (Home2: VC22).classForCoder())) {
      let friendView = oneView as! (Home2: VC22)
      friendView.testing = "Worked?"
    }
}

ANYHELP很受欢迎!花费的总时间:8小时

3 个答案:

答案 0 :(得分:0)

您的传递数据任务正在进行此过程

V12 - (pop) - > V11 - (开关) - > V21 - (推) - > V22

如果您选择传递数据,则需要通过所有这三项交易并将其传递给大量编码并且很难实践。

不是传递数据,而是实现目标的更好方法是将数据存储在V12中,然后从V22加载它。所以现在你需要担心的是如何将用户从V12转移到V22。

您只需要两行代码来存储和读取UserDefaults

中的数据

在您的V12上,在您执行上述交易之前,请先保存您的数据

UserDefaults.standard.set("yourStringData", forKey: "data")

然后当你从viewDidLoad到达VC22时,以这种方式读取存储的信息

UserDefaults.standard.string(forKey: "data")

对于您的查看事务部分,popToViewController用于从子视图控制器转到它的父级。因此,当您切换标签并获取UINavigationController时,topViewController必须为VC21。因此,如果您通过故事板segue连接它们,请转到VC22,只需将其称为“

let navController = self.tabBarController?.viewControllers![1] as! UINavigationController
let VC21 = navController.topViewController!
VC21.performSegue(withIdentifier: "segue", sender: nil)

答案 1 :(得分:0)

您还可以对tabbar进行子类化并创建一个变量来存储数据。然后两个VC都可以访问数据。这种方式也减轻了对单身人士的可能需求。

答案 2 :(得分:0)

听起来你需要重新思考你的方法。这取决于您设置应用程序的方式,但除了将数据从一个VC直接传递到另一个VC之外,将这些数据存储在其他地方是有意义的。以下是一些选项:

  1. 单例存储您的数据并将其从一个VC传递到另一个VC,这样如果 VC12 将数据存储在Singleton中,那么 VC22 可以访问它因为它也可以访问单身人士。

  2. Container View Controller存储要在其子视图控制器之间共享的数据。因此,在此示例中, TabBarController 可以存储此数据。

  3. 使用 UserDefaults 作为穷人的Singleton / Persistence解决方案。

  4. 使用SQLite,Core Data或Realm等完整的数据持久层来存储和检索数据。

  5. ......还有其他人,但我认为根据您的需要,其中一种解决方案可以很好地适用于您。