【问题标题】:How to check if the top most view controller is an ImagePickerController如何检查最顶层的视图控制器是否是 ImagePickerController
【发布时间】:2021-08-28 13:55:13
【问题描述】:

我使用following 来检查最顶层的视图控制器。我需要检查顶视图控制器是否是 ImagePickerController

guard let window = UIApplication.shared.windows.first(where: \.isKeyWindow) else { return }
        
guard let topVC = window.topViewController() else { return }

if topVC.isKind(of: ImagePickerController.self) {
    // ...
}

但我收到错误

如何检查顶部 vc 是否有/是否显示了 imagePicker?

extension UIWindow {
    func topViewController() -> UIViewController? {
        var top = self.rootViewController
        while true {
            if let presented = top?.presentedViewController {
                top = presented
            } else if let nav = top as? UINavigationController {
                top = nav.visibleViewController
            } else if let tab = top as? UITabBarController {
                top = tab.selectedViewController
            } else {
                break
            }
        }
        return top
    }
}

【问题讨论】:

  • if let imagePicker = UIApplication.shared.windows.first?.topViewController() as? UIImagePickerController { } 检查这个。还是UIImagePickerController.self
  • 它有效,谢谢:)
  • 请将其添加为答案,以便我接受

标签: ios swift uiimagepickercontroller


【解决方案1】:

您正在设置ImagePickerController.self,但类名是UIImagePickerController

你可以这样使用

if let imagePicker = UIApplication.shared.windows.first?.topViewController() as? UIImagePickerController {
 // Do your stuf
}

或者

if topVC.isKind(of: UIImagePickerController.self) {
    // ...
}

注意:通过使用它,您不能将顶视图控制器转换为UIImagePickerController。因为它是由苹果设计的。

您可以使用它并通过它访问视图控制器。

if let pickerHostClass = NSClassFromString("PUPhotoPickerHostViewController"), topVC.isKind(of: pickerHostClass) {
   topVC.view.alpha = 0.5
}

【讨论】:

  • 我可以在 6 分钟内接受。你是对的,我忘了在 ImagePickerController 前面添加 UI。你做的第一种方式我没有想到,我总是使用第二种方式。也谢谢你:)
  • 你在运行后检查过这个条件是否满足?它解决了你的编译错误,但我认为你不能像这样使用它。
  • 它确实解决了编译错误,这就是我接受它的原因,但我还没有检查。为什么它不起作用?我适用于其他场景,例如我有一个名为 MyClass 的类。如果我使用if topVC.isKind(of: MyCLass.self { print("MyClass is topVC") } 效果很好。为什么它不适用于 imagePicker?
  • 因为MyCLass.self 是你创建的,UIImagePickerController 是苹果设计的,所以你不能这样做。
  • 这工作:) 谢谢!!!。你教会了我一些新东西:)
猜你喜欢
  • 1970-01-01
  • 2020-04-21
  • 2021-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多