gpt4 book ai didi

ios - 从 Controller 外部呈现 View Controller ,不传递自引用

转载 作者:行者123 更新时间:2023-11-28 23:50:07 25 4
gpt4 key购买 nike

我有一个应用程序,其中有管理员和普通用户,管理员可以在其中删除用户。删除用户后,我需要显示您已被删除。我从服务器获得 apn,我必须向他展示 View Controller ,解释为什么会发生这种情况,并清除他的所有数据。目前,一旦我收到 apn,我就会发布一个通知,该通知由显示该 View Controller 的 View Controller 接收。

let storyboard = UIStoryboard(name: "Main", bundle: Bundle.main)
let viewController = storyboard.instantiateViewController(withIdentifier: "AccountLockedController") as! AccountLockedController
self.present(viewController, animated: true) {
print("Presented")
}

现在项目的规模越来越大,所以现在我将 self 的引用传递给一个函数来基本上做同样的事情

userInactivated(viewController: self) 

从所有 View Controller 中,一个函数中存在帐户锁定 View Controller

有没有办法让我直接显示当前 View Controller 引用的帐户锁定 View Controller ,或者我可以得到这个值我找到了这个但是

if let presentingViewController = self.appDelegate.window?.rootViewController?.presentingViewController {}

但是在非 View Controller 类中没有self.appDelegate

感谢任何帮助

最佳答案

你可以使用这个扩展

extension UIApplication
{
class func topViewController(_ base: UIViewController? = UIApplication.shared.keyWindow?.rootViewController) -> UIViewController?
{
if let nav = base as? UINavigationController
{
let top = topViewController(nav.visibleViewController)
return top
}

if let tab = base as? UITabBarController
{
if let selected = tab.selectedViewController
{
let top = topViewController(selected)
return top
}
}

if let presented = base?.presentedViewController
{
let top = topViewController(presented)
return top
}
return base
}

}

然后你可以使用这段代码从任何地方展示你的 Controller

let storyboard = UIStoryboard(name: "Main", bundle: Bundle.main)
let viewController = storyboard.instantiateViewController(withIdentifier: "AccountLockedController") as! AccountLockedController
UIApplication. topViewController()?.present(viewController, animated: true) {
print("Presented")
}

关于ios - 从 Controller 外部呈现 View Controller ,不传递自引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52113338/

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