【发布时间】:2018-02-23 20:04:51
【问题描述】:
我知道这个问题已经被问到很多关于堆栈溢出的问题。所以我有一个 TabBarController,它有 2 个 NavigationController,这两个 NavigationController 都有一个 TableViewController。我正在使用 firebase 来获取用户,将用户保存到一个名为 currentUser 的变量中。现在我的问题从这里开始,我想将第二个 Navigation/Tableview 控制器标题设置为用户名。我知道如何使用为 segue 做准备来传递数据,但是 TabBarController 中没有 segue。
我找到了一个解决方案,不知道它是好是坏。我所做的是让第一个控制器成为标签栏的代表。然后我添加了 tabBarController 确实选择了方法。这是代码。
class FirstTableVC: UITableViewController, UITabBarControllerDelegate {
var currentUser: User?
override func viewDidLoad() {
super.viewDidLoad()
tabBarController?.delegate = self
}
//Code that saves user
func code() {
...
...
...
}
func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) {
if viewController == tabBarController.viewControllers![1] {
let navController = tabBarController.viewControllers![1] as? UINavigationController
let secondTableVC = navController?.topViewController as! SecondTableVC
secondTableVC.currentUser = currentUser
}
}
}
class SecondTableVC: UITableViewController {
var currentUser: User?
override func viewDidLoad() {
super.viewDidLoad()
navigationItem.title =currentUser?.name
}
}
这可行,但不确定这是否是一种好方法。我想知道是否有更好的方法或更有效的方法。谢谢:)
添加: 好的,请阅读 article 关于使用 tabController 传递数据的内容。作者说我们应该使用应用程序的状态来传递数据。我不太确定他的意思是什么。虽然他是这个意思。
示例代码:
class Person {
var name: String
var email: String
static var currentPerson: Person?
init(name: String, email: String) {
self.name = name
self.email = email
}
}
请帮我澄清一下。谢谢。
【问题讨论】:
标签: swift uitabbarcontroller swift4