我有一个应用程序,其中有管理员和普通用户,管理员可以在其中删除用户。删除用户后,我需要显示您已被删除。我从服务器那里得到apn,我必须根据该信息向他显示视图控制器,解释为什么发生这种情况,并清除他的所有数据。当前,一旦我收到apn,我就会发布一个通知,该通知由视图控制器接收,并从中显示该视图控制器。
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)
在所有视图控制器中,功能中都存在Accountlocked View Controller
我是否可以直接显示当前视图控制器引用的帐户锁定视图控制器,还是可以获取我发现的该值,但是
if let presentingViewController = self.appDelegate.window?.rootViewController?.presentingViewController {}
但是非视图控制器类中没有self.appDelegate
感谢您的任何帮助
答案 0 :(得分:0)
您应先注销用户,然后将window?.rootViewController
设置为Accountlocked View Controller
您可以使用let appDelegate = UIApplication.shared.delegate as? AppDelegate
如果您不想将rootViewController
设置为Accountlocked View Controller
,请注销用户并将rootViewController
设置为应用程序的未登录用户登录屏幕,并显示{{1 }}。
答案 1 :(得分:0)
您可以使用此扩展名
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
}
}
然后您可以使用此代码从任何地方展示控制器
let storyboard = UIStoryboard(name: "Main", bundle: Bundle.main)
let viewController = storyboard.instantiateViewController(withIdentifier: "AccountLockedController") as! AccountLockedController
UIApplication. topViewController()?.present(viewController, animated: true) {
print("Presented")
}