如何从UITabBarViewController获取对视图控制器的引用
编辑:我在我的方法中脱离了基础。我试图将数据从一个VC传递到另一个。源VC不受选项卡栏的控制,因此我无法通过它来引用目标VC。我试图通过Storyboard引用目标VC,但目标VC上的数据仍然为零。我正在使用核心数据,并希望将ManagedObjectContext传递给另一个VC。下面是代码:如何从UITabBarViewController获取对视图控制器的引用
......
do {
try self.managedObjectContext.save()
appUserID = user.userID!
} catch {
fatalError("Error: \(error)")
}
}
}
self.passManagedObjectContext()
}
func passManagedObjectContext() {
let profileTableViewController = UIStoryboard(name: "Profile", bundle: nil).instantiateViewController(withIdentifier: "ProfileViewController") as! ProfileTableViewController
profileTableViewController.managedObjectContext = self.managedObjectContext
}
I am passing data from the AppDelegate to other ViewControllers by referencing my TabBarViewControllers stack like so:
let tabBarController = window!.rootViewController as! UITabBarController
if let tabBarViewControllers = tabBarController.viewControllers {
let profileNavController = tabBarViewControllers[4] as! UINavigationController
let profileTableViewController = profileNavController.topViewController as! ProfileTableViewController
profileTableViewController.managedObjectContext = context
}
}
.....
编辑完 我想现在要做的相同,但来自一个视图控制器到另一种是通过标签栏(无SEGUE)进行访问。上面的代码不承认window!.rootViewController
我怎么可以参考根UITabBarController?
UIViewController
有一个内置的可选属性tabBarController
,让您的视图控制器内部可以访问tabBarController
像这样:
if let tabBarController = tabBarController {
//get the controller you need from
//tabBarController.viewControllers
//and do whatever you need
}
这里
:在 Apple's UIViewController documentation的“获取其他相关视图控制器”部分可用属性的当前目录我试过你的方法,但只有后来才意识到源VC不是Tab Bars集合的一部分。我试图通过故事板来完成。仍然没有运气。已经更新了这个问题。谢谢。 –
而不是尝试在视图控制器的基础上传递托管对象上下文,是否尝试从任何需要它的视图控制器的AppDelegate访问它? – BJHStudios
您可以使用segue共享跨栏控制器的跨数据视图控制器 – Krunal
您在AppDelegate中的何处/何时试图执行此操作? – DonMag
@DonMag我之前已经从AppDelegate传递数据,并试图在VC之间使用相同的方法它们不是同一个导航堆栈的一部分,我不能通过Tab Bar来完成,所以我试图通过故事板。谢谢。 –