Как проверить текущий ViewController в Swift 3? - PullRequest
0 голосов
/ 08 октября 2018

Я на 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 или какую-то другую вещь. Может ли кто-нибудь помочь мне в этом. Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 08 октября 2018

Не имеет смысла использовать пользовательские настройки по умолчанию, потому что они будут постоянными, даже если ваше приложение будет убито.Это означает, что если пользователь находится в чате, закрывает приложение, открывает его снова, ваше значение по умолчанию для пользователя будет означать, что пользователь все еще находится на экране чата.

Существует несколько способов отображения экрана чата.Он может быть представлен, может быть вставлен в панель навигации, внутри панели вкладок или даже добавлен в представление контента.Поэтому я бы сказал, что все же лучше использовать willAppear и didDisappear.Статическое значение должно сработать:

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.

0 голосов
/ 08 октября 2018

Вы можете проверить стек навигации вашего текущего контроллера навигации.

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