1

问题可能听起来有点复杂,所以让我缓解压力*从标签栏开关传递数据直接进入另一个视图控制器

  • 可以说我有2个标签栏标签(HOME1,家庭2)

  • 两者(HOME1,家庭2)有一个具有两个视图控制器每个

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

  • 家庭2(导航器 - > 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个小时

回答

0

你通数据的任务是怎么回事,虽然这个过程

V12 - (POP) - > V11 - (转) - > V21 - (推) - > V22

如果您选择传递数据,您将需要通过所有这三个事务并且这是很多编码,这很难练习。

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

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

数据在您的V12,你正在做上述交易前,先保存你的数据是这样

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

那么您什么时候到达VC22,从viewDidLoad,读取存储的信息以这种方式

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) 
+0

我现在检查这个,谢谢你 – 24hrcoder

+0

我不认为它工作,因为收到的数据永远不会被断点调用 – 24hrcoder

+0

@ 24hrcoder正如我所说的,你需要确保目标视图控制器是有效的。如果它还没有启动或已经停止导航控制器,这不会工作。即使目标视图控制器未被定位,您是否要传递数据? –

0

你也可以继承你的TabBar,并创建一个变量来存储你的数据在那里。那么两个VC都可以访问这些数据。这样也减轻了单身人士可能的需要。

+0

感谢您试图帮助Jerland2,但它可能会比单身先生深一点 – 24hrcoder

+0

@ 24hrcoder我建议的解决方案是不涉及单身。我的解决方案是我已经多次使用一个几乎相同的问题,而不使用单例 – Jerland2

+0

谢谢杰兰,但它的不同 – 24hrcoder

0

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

  1. 辛格尔顿存储你的数据,你传递各地从一个VC到另一个,这样,如果VC12存储在辛格尔顿的数据,然后VC22可以很容易地也访问它,因为它有权访问单身人士。

  2. 拥有容器 View Controller存储要在其子视图控制器之间共享的数据。所以,在这个例子中,TabBarController可以存储这些数据。

  3. 使用UserDefaults作为一个贫穷的芒辛格尔顿/持久性解决方案。

  4. 使用使用SQLite境界一个完全成熟的数据持久层,核心数据,或例如用于存储和检索数据。

......还有其他人,但我认为这些解决方案之一可以根据您的需求很好地为您工作。

+0

谢谢吉列尔莫的答复,但我可能会与方先生 – 24hrcoder

相关问题