gpt4 book ai didi

swift - 如何在没有当前 Controller 的情况下调用委托(delegate)函数

转载 作者:行者123 更新时间:2023-11-28 08:55:09 26 4
gpt4 key购买 nike

我有带 2 条路径的 Tap Bar Controller 。一个是 settingController 另一个是 loginControllercontactListController。
当我运行该程序时,入口品脱设置为
contactListController,如果登录是错误的,则显示应用程序loginController`。将登录值设置为 true 并关闭 loginController 后。在底部我有标签栏 Controller :设置

当我进入设置时,我有一个 LOGOUT 按钮,当我点击这个按钮时我想做什么如何将值设置为 false?我在 ContactListSettingController

之间没有任何联系

这是我的联系人列表 Controller

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
}

}

这是设置 Controller

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)
}

我的 Controller 设置首先出现。我怎样才能以其他方式更改此值?

更新在我的联系人列表中

var loggedIn: Bool = false {
didSet {
if loggedIn == true {
self.configureView()
}
}
}

override func viewDidAppear(animated: Bool) {
if loggedIn == false {
performSegueWithIdentifier("showLogin", sender: nil)
}
//tableView.reloadData()
}

最佳答案

考虑 1:使用通知(所有感兴趣的 Controller 都注册为观察者)对 session 状态更改使用react,2:将您的 session 状态移动到“更高的链”(例如在或“挂起”)你的应用程序委托(delegate)),或者 3:制作一个单例 session Controller 。

1 可以与 2 和 3 一起使用,而 2 或 3 可以让您更轻松地从应用中的任何位置访问当前状态。我自己会混合使用 1 和 3。

通常,这种方法使您不必遍历和检查 Controller 层次结构以在所有其他 Controller 上查找和设置相同的东西(这很讨厌,因为它是如此紧密耦合;更改层次结构和/或在其他地方重用 VC 可能会打破东西)。

关于swift - 如何在没有当前 Controller 的情况下调用委托(delegate)函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33260692/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com