如何以编程方式快速使用情节提要 ID 获取当前视图控制器(当前正在呈现)?

Posted

技术标签:

【中文标题】如何以编程方式快速使用情节提要 ID 获取当前视图控制器(当前正在呈现)?【英文标题】:How to get Current viewcontroller (currently Presenting) using storyboard id in swift programmatically? 【发布时间】:2016-04-28 11:39:45 【问题描述】:

**如何快速获取呈现视图控制器。我正在使用情节提要 ID。**为了展示下一个视图控制器,我该如何添加到层次结构中?

我试过这样:

   let mainStoryboard = UIStoryboard(name: "Main", bundle: nil)
   let logincontroller  = mainStoryboard.instantiateViewControllerWithIdentifier("LoginViewController")

    if UIApplication.sharedApplication().keyWindow?.rootViewController.presentingViewController == logincontroller 

     let mainStoryboard = UIStoryboard(name: "Main", bundle: nil)
     let nextVC  = mainStoryboard.instantiateViewControllerWithIdentifier(storayboardIdentifier)

     self.presentViewController(nextVC, animated: true, completion: nil)

     

在 Appdelegate.swift 中

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool 

         if isLoggedin == false 

        self.window = UIWindow(frame: UIScreen.mainScreen().bounds)

        let storyboard = UIStoryboard(name: "Main", bundle: nil)

        let initialViewController = storyboard.instantiateViewControllerWithIdentifier("LoginViewController")

        self.window?.rootViewController = initialViewController


        self.window?.makeKeyAndVisible()

        return true
    
    else 

        self.window = UIWindow(frame: UIScreen.mainScreen().bounds)

        let storyboard = UIStoryboard(name: "Main", bundle: nil)

        let initialViewController = storyboard.instantiateViewControllerWithIdentifier("HomeViewController")

        self.window?.rootViewController = initialViewController
        self.window?.makeKeyAndVisible()

        return true
 


代码有效,它显示视图但仍然有警告

无法实例化默认视图控制器 UIMainStoryboardFile 'Main' - 也许指定的入口点是 没有设置?

【问题讨论】:

【参考方案1】:

检查初始入口点。

在代码练习下方显示屏幕也是更好的方法。

let objNextViewController = self.storyboard?.instantiateViewControllerWithIdentifier("ID_NextViewController") as? ViewController

self.presentViewController(objNextViewController, animated: true)  () -> Void in
            print("Achive")

已编辑:

如果您想从已经呈现的视图控制器中呈现视图控制器,请使用以下代码。

var currentViewController : UIViewController!


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

if let viewControllers = appDelegate.window?.rootViewController?.presentedViewController 


    self.currentViewController = viewControllers as UIViewController


else if let viewControllers = appDelegate.window?.rootViewController?.childViewControllers 


    self.currentViewController = viewControllers.last! as UIViewController




let objNewViewController : NewViewController!

    self.currentViewController.presentViewController(objNewViewController!, animated: true, completion:  () -> Void in
                        NSLog("Achived")

)

【讨论】:

那不会完全编译。 presentViewController 不接受可选项,但 objNextViewController 在这里是可选项。此外,您可能想要as? UIViewController(尽管不需要演员表)。 谢谢@AlessandroOrnano 我在 appdelegate 上定义的初始视图控制器取决于条件,然后我如何在存储板属性检查器上设置它。 我的问题还包括如何使用情节提要 id 获取当前呈现的视图控制器 您可以将入口点设置为导航控制器,通过appdelegate中的条件您可以将根视图控制器设置为导航控制器。检查编辑的答案。【参考方案2】:

试试这个代码presentingViewController使用故事板名称:

let viewController:UIViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("ViewController") as UIViewController

self.presentViewController(viewController, animated: false, completion: nil)

【讨论】:

【参考方案3】:

试试这个代码,

let storyboard : UIStoryboard = UIStoryboard(name:"Main", bundle: nil)
let vc : WelcomeViewController = storyboard.instantiateViewControllerWithIdentifier("WelcomeID") as WelcomeViewController    
let navigationController = UINavigationController(rootViewController: vc) 
self.presentViewController(navigationController, animated: true, completion: nil)

希望对你有帮助

【讨论】:

【参考方案4】:

我的猜测是您还没有为情节提要设置初始视图控制器。

要解决此问题,请打开情节提要并选择要显示为第一个的 UIViewController。然后在Attributes inspector 选项卡(实用程序面板中右数第三个)中,查看View Controller 部分下方并确保选中Is Initial View Controller 复选框。

【讨论】:

以上是关于如何以编程方式快速使用情节提要 ID 获取当前视图控制器(当前正在呈现)?的主要内容,如果未能解决你的问题,请参考以下文章

iOS:如何以编程方式将视图添加到情节提要视图

如何在没有情节提要的情况下以编程方式实例化视图控制器

快速以编程方式创建后如何在情节提要中链接 UIButton

如何以编程方式使用另一个视图中的按钮从情节提要中打开 UIViewController?

如何从情节提要以编程方式加载 UIViewController?

如何以编程方式为情节提要中的子视图设置视图控制器?