获取iOS Swift中的所有UIViewControllers列表

Sri*_*mar 6 uiviewcontroller ios swift

有没有办法在iOS Swift Project中获取所有UIViewControllers.我想得到所有UIViewControllers的数组并检查是否存在特定的UIViewController.我必须在项目中找到特定的UIViewController是否存在.

Has*_*sya 8

您可以使用以下代码执行此操作.

let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate

if let viewControllers = appDelegate.window?.rootViewController?.presentedViewController
{
    // Array of all viewcontroller even after presented
}
else if let viewControllers = appDelegate.window?.rootViewController?.childViewControllers
{
    // Array of all viewcontroller after push                            
}
Run Code Online (Sandbox Code Playgroud)

Swift 4.2(XCode 10)

let appDelegate = UIApplication.shared.delegate as! AppDelegate

if (appDelegate.window?.rootViewController?.presentedViewController) != nil
{
    // Array of all viewcontroller even after presented
}
else if (appDelegate.window?.rootViewController?.children) != nil
{
    // Array of all viewcontroller after push
}
Run Code Online (Sandbox Code Playgroud)


eon*_*ist 5

这是我根据以前的答案所做的扩展

使用泛型 + 扩展 (Swift 5.1)

/**
 * - Returns: ViewController of a class Kind
 * ## Examples: 
 * UIView.vc(vcKind: CustomViewController.self) // ref to an instance of CustomViewController
 */
 public static func vc<T: UIViewController>(vcKind: T.Type? = nil) -> T? {
     guard let appDelegate = UIApplication.shared.delegate, let window = appDelegate.window else { return nil }
     if let vc = window?.rootViewController as? T {
         return vc
     } else if let vc = window?.rootViewController?.presentedViewController as? T {
         return vc
     } else if let vc = window?.rootViewController?.children {
         return vc.lazy.compactMap { $0 as? T }.first
     }
     return nil
 }
Run Code Online (Sandbox Code Playgroud)