【问题标题】:How to check Current ViewController in Swift 3?如何在 Swift 3 中检查当前 ViewController?
【发布时间】:2019-03-12 18:29:55
【问题描述】:

我在ChatViewController 上,然后我导航到其他页面,然后我又访问了ChatViewController,所以当我访问同一页面时,我如何查看ChatViewController 页面上的我。

override func viewWillAppear(_ animated: Bool) {

    super.viewWillAppear(true)

    UserDefaults.standard.value(forKey: "ChatView")

    print("view will appear called")
}


override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(true)

    UserDefaults.standard.object(forKey: "ChatView")
    print("view will disappear called")
}

我是否需要设置任何 UserDefaults 值或其他一些东西。有人可以帮助我吗?提前谢谢

【问题讨论】:

  • 你的问题我不清楚,请详细说明
  • 当我访问同一页面时。看不懂
  • 检查视图控制器是否是视图控制器中的视图控制器有什么意义? (是的,这就是你的问题听起来像我@_@)
  • 当您创建该对象或使用适当的故事板 segue 并将其呈现给用户时,您将在同一个视图控制器中。为什么要检查?

标签: ios swift3 nsuserdefaults


【解决方案1】:

您可以检查当前导航控制器的导航堆栈。

let viewControllers = self.navigationController!.viewControllers as [UIViewController]
for vc:UIViewController in viewControllers {
    if vc.isKind(of: YourVC.self) {
    }
}

【讨论】:

    【解决方案2】:

    使用用户默认值是没有意义的,因为即使您的应用程序被终止,这些默认值也会保持不变。这意味着如果用户正在聊天,关闭应用程序,再次打开它,您的用户默认值将显示用户仍在聊天屏幕上。

    有多种显示聊天屏幕的方式。它可能会被呈现,可能会被推送到导航栏、标签栏内,甚至可以自定义添加到内容视图中。所以我想说还是最好使用willAppeardidDisappear。静态值应该可以解决问题:

    class ChatViewController: UIViewController {
    
        static private(set) var currentVisibleInstance: ChatViewController?
    
        override func viewDidAppear(_ animated: Bool) {
            super.viewDidAppear(animated)
    
            ChatViewController.currentVisibleInstance = self
        }
    
        override func viewWillDisappear(_ animated: Bool) {
            super.viewWillDisappear(animated)
    
            ChatViewController.currentVisibleInstance = nil
        }
    
    }
    

    现在您可以在任何地方使用它:

    let isChatVisible: Bool = ChatViewController.currentVisibleInstance != nil
    let currentChatController: ChatViewController? = ChatViewController.currentVisibleInstance
    

    如果您认为合适,当然可以将此 currentVisibleInstance 放在其他类中。您只需更改为SomeOtherClass.currentVisibleChatViewController = self

    【讨论】:

    • 我已经在我的应用程序中实现了推送通知,当我点击时,我必须根据推送通知和向当前用户发送聊天消息的特定用户导航到聊天页面。所以我试图通知我当我单击其他页面并导航到 ChatViewController 时,聊天页面与否
    • @ashwani5389 也许把它放在你的问题中会更好。你在这里问的远远超出了你在这篇文章中的要求。最好创建一个新帖子,添加您拥有的所有信息以及您尝试过的内容以及视图控制器的层次结构。
    猜你喜欢
    • 1970-01-01
    • 2017-01-11
    • 2017-07-30
    • 2017-05-25
    • 2017-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-28
    相关资源
    最近更新 更多