我从firebase获取数据。然后使用(prepareForSegue)为下一个UIView设置值。
using (var context = new MyDataEntities())
{
IList<MyTable> dataList = context.MyTable.ToList<MyTable>();
dataGrid1.ItemsSource = dataList;
}
FirstTabBar是一个包含3个UIView的TabBarController。 这3个UIView类如何从FirstTabBar类中获取该值?
答案 0 :(得分:2)
简单!
只需通过segue传递数据;假设有两个控制器,firstController和secondController,数据是DataToPass,它是一个CoolData类
在您来自
的控制器中override func prepareForSegue(segue: NSStoryboardSegue, sender: AnyObject?) {
let second = segue.destinationController as! SecondController
second.representedObject = self.theDataToPass
}
并在控制器中
override func viewWillAppear() {
self.thePassedData = self.representedObject as! CoolData
}
答案 1 :(得分:0)
您可以使用委托。我将用一个简单的例子解释两个标签栏,但你可以根据自己的需要进行转换。
首先,我们必须创建一个协议和一个我们想要在我们想要的视图控制器中执行的函数。
protocol DataDelegate: class {
func didReceiveData(data: String)
}
假设我们有第一个tabBar的 FirstViewController ,第二个tabBar的 SecondViewController 。在 SecondViewController 中,我们必须为委托声明一个弱变量。
// In SecondViewController
weak var dataDelegate: DataDelegate?
在 FirstViewController 中,我们必须符合 UITabBarControllerDelegate (不要忘记在 viewDidLoad {{1}中将委托设置为self })并使用委托方法self.tabBarController?.delegate = self
tabBarController(tabBarController: UITabBarController, didSelectViewController viewController: UIViewController)
我们可以看到 viewController 是我们点击过的ViewController(在我们的例子中是 SecondViewController )。我们必须将其转换为SecondViewController,以便我们可以访问它的属性并将 dataDelegate 设置为self。
现在我们有义务遵守 DataDelegate 协议。我们只需要实现一个功能 - didReceiveData()。
// MARK: - TabBarControllerDelegate
extension FirstViewController: UITabBarControllerDelegate {
func tabBarController(tabBarController: UITabBarController, didSelectViewController viewController: UIViewController) {
if let secondViewController = viewController as? SecondViewController {
secondViewController.dataDelegate = self
}
}
}
最后,在我们的 SecondViewController 中,我们必须告诉我们要在哪里执行该函数。我会这样做 viewDidAppear 但你可以随时随地。
// MARK: - DataDelegateProtocol
extension FirstViewController: DataDelegate {
func didReceiveData(data: String) {
print(data)
}
}
这家伙很好地解释了代表团link。希望你明白了。