Как проверить текущий загруженный контроллер вида?(ObjC + Swift) - PullRequest
0 голосов
/ 23 октября 2018

В моем приложении есть функция, в которой я хочу напечатать что-либо в зависимости от загруженного контроллера текущего представления.Я делаю это, устанавливая глобальную переменную (Bool) и затем переключая флаги в классах контроллера представления.Из моего основного класса у меня есть что-то вроде этого:

var FirstViewControllerisVisible: Bool = false
var SecondViewControllerisVisible: Bool = false
var ThirdViewControllerisVisible: Bool = false

@objc func PlayAgainfunc(_ sender: Any) {
    if counter % 15 == 0 {
        if FirstViewControllerisVisible == true {
            print("First View Controller is visible")
        } else if SecondViewControllerisVisible == true {
            print("Second View Controller is visible")
        } else if ThirdViewControllerisVisible == true {
            print("Third View Controller is visible")
        }
    }
    counter += 1
}

Затем в этих классах я могу установить флаги следующим образом:

override func viewDidAppear(_ animated: Bool) {
    FirstViewControllerisVisible = true
}

override func viewDidDisappear(_ animated: Bool) {
    FirstViewControllerisVisible = false
}

Это прекрасно работало, когда это был исключительно Swift,но проблема с глобальными переменными в том, что они не доступны для Objective-C.Я не могу найти способ установить флаги в моих классах ObjC и затем проверить, является ли истина или ложь.Например, если бы я попытался:

- (void)viewDidAppear:(BOOL)animated; {
    [(FirstViewControllerisVisible) == true];
}

- (void)viewDidDisappear:(BOOL)animated; {
    [(FirstViewControllerisVisible) == false];
}

, я получил бы ошибку «использование необъявленного идентификатора», потому что мои глобальные переменные, объявленные в Swift, были только Swift.

Ответы [ 2 ]

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

добавить ниже упомянутое расширение.Вы получите желаемый результат.

extension UIApplication {
        /// will return currently showing view controller
        static var topMostViewController: UIViewController? {
            return UIApplication.shared.keyWindow?.rootViewController?.visibleViewController
        }
    }

    extension UIViewController {
        /// The visible view controller from a given view controller
        var visibleViewController: UIViewController? {
            if let navigationController = self as? UINavigationController {
                return navigationController.topViewController?.visibleViewController
            } else if let tabBarController = self as? UITabBarController {
                return tabBarController.selectedViewController?.visibleViewController
            } else if let presentedViewController = presentedViewController {
                return presentedViewController.visibleViewController
            } else {
                return self
            }
        }
    }

и доступ к нему, как:

let viewController = UIApplication.topMostViewController

Счастливое кодирование

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

После загрузки контроллера вида вы можете

if let viewController = UIApplication.shared.keyWindow?.rootViewController {
    print(type(of: viewController))
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...