在我的应用程序中,我有一个函数,希望它根据所加载的当前视图控制器来打印某些内容。通过设置全局变量(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。
答案 0 :(得分:0)
加载视图控制器后,您可以
if let viewController = UIApplication.shared.keyWindow?.rootViewController {
print(type(of: viewController))
}
答案 1 :(得分:0)
添加以下提到的扩展名。您将获得理想的结果。
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
快乐编码