我有两条路径的Tap Bar Controller。一个是settingController
其他一个是loginController
和contactListController.
When i run the program the entry pint is set to
contactListController and if login is false apps shown
loginController`。登录值设置为true并且loginController被关闭。在底部我有Tab Bar Controller:ContactList |设置
当我进入设置时,我有一个LOGOUT
按钮,当我点击这个如何设置值登录为false时我想做什么?我在 ContactList 和 SettingController
这是我的ContactListController
class ContactsTableViewController: UITableViewController, SettingsControllerDelegate {
let settingsController: SettingsController = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("settingsController") as! SettingsController
override func viewDidLoad() {
super.viewDidLoad()
settingsController.delegate = self
}
func didLogoutSuccessfully() {
loggedIn = false
}
}
这是设置控制器
protocol SettingsControllerDelegate {
func didLogoutSuccessfully()
}
class SettingsController: UITableViewController {
var delegate: SettingsControllerDelegate?
fun tapButton() {
self.delegate?.didLogoutSuccessfully() // Set login as false
}
如果我添加了
override func viewDidLoad() {
super.viewDidLoad(
settingsController.delegate = self
presentViewController(settingsController, animated: true, completion: nil)
}
首先显示我的控制器设置。如何以其他方式更改此值?
更新 在联系人列表中我有
var loggedIn: Bool = false {
didSet {
if loggedIn == true {
self.configureView()
}
}
}
override func viewDidAppear(animated: Bool) {
if loggedIn == false {
performSegueWithIdentifier("showLogin", sender: nil)
}
//tableView.reloadData()
}
答案 0 :(得分:0)
您可以使用UITabViewControllers.viewControllers方法在选项卡之间传递数据,该方法返回选项卡中视图控制器的数组
//in SettingsVC
func viewWillDisapear(){
//assuming its in the second index of tabBar
let contactVC = self.tabBarController.viewControllers[1] as ContactsTableViewController
contactVC.delegate = self
contactVC.loggedIn = true //or false as you wish
super.viewWillDisapear()
}
答案 1 :(得分:0)
考虑1:使用通知(所有感兴趣的控制器都注册为观察者)来响应会话状态的变化,2:将你的会话状态转移到"更高的链接" (例如in或"悬挂"你的app委托),或者3:制作一个单独的会话控制器。
1可以与2和3一起使用,2或3可以更轻松地从应用程序中的任何位置访问当前状态。我自己和1和3混在一起。
这种方法通常使您不必走路并检查控制器层次结构,以便在所有其他控制器上找到并设置相同的thig(这是因为它如此紧密耦合;更改层次结构和/或重用其他地方的风险投资可能会破坏事情。)