在 AppDelegate 中以编程方式设置 App 入口点

Posted

技术标签:

【中文标题】在 AppDelegate 中以编程方式设置 App 入口点【英文标题】:Set App Entry point programmatically in AppDelegate 【发布时间】:2017-02-11 01:56:55 【问题描述】:

在我的 appdelegate 中,我想检查 globUs.hasName。如果是这样,我希望应用程序的Entry Point 成为我的main 故事板。如果不是,我希望应用程序的Entry Point 成为我的newUser 故事板。如何设置应用程序的入口点?如果不能,实现此功能的最有效方法是什么?

【问题讨论】:

只需在 didFinishLaunchingWithOptions 函数中将 self.window?.rootViewController 设置为首选视图控制器。 【参考方案1】:

考虑没有入口点。然后,在 appDelegate 中,测试您的变量并相应地选择适当的故事板。然后显示该故事板中的视图控制器。

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool 

    if globUs.hasName 
        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let vc = storyboard.instantiateViewController(withIdentifier: "FirstMainVC")
        self.window = UIWindow(frame: UIScreen.main.bounds)
        self.window?.rootViewController = new
        self.window?.makeKeyAndVisible()
    
    else 
        let storyboard = UIStoryboard(name: "NewUser", bundle: nil)
        let vc = storyboard.instantiateViewController(withIdentifier: "FirstNewUserVC")
        self.window = UIWindow(frame: UIScreen.main.bounds)
        self.window?.rootViewController = welcomeVC
        self.window?.makeKeyAndVisible()
    

    return true

【讨论】:

当我使用类似于此 AppDel 的方法时,会引发 SIGABRT。它说“在捆绑包 NSBundle 中找不到名为‘OneStoryboard’的故事板/gabrielspound/Library/Developer/CoreSimulator/Devices/6CB76037-BA27-45DA-8671-01AAF78E93A6/data/Containers/Bundle/Application/0B5AC724 -BEF5-4DB6-A68F-8407A6ECF627/Social Justice.app>(已加载)'" UIStoryboard 构造函数中的“名称:”字段是什么意思?是任意的还是我必须使用 Main.storyboard 的文件名? @GabeSpound 是的,您正在使用文件名【参考方案2】:

试试

var sb = UIStoryboard(name: "OneStoryboard", bundle: nil)
/// Load initial view controller
var vc = sb.instantiateInitialViewController()
/// Or load with identifier
var vc = instantiateViewController(withIdentifier: "foobarViewController")

/// Set root window and make key and visible
self.window = UIWindow(frame: UIScreen.mainScreen.bounds)
self.window.rootViewController = vc
self.window.makeKeyAndVisible()

或者尝试在情节提要中手动转场。要执行手动 segue,您必须先在 storyboard 中定义一个带有标识符的 segue,然后在视图控制器中调用 performSegue(withIdentifier:sender:)

【讨论】:

查看我为上面的答案留下的评论,它也适用于这里。 我得到了这个工作,但其他方法似乎更有效

以上是关于在 AppDelegate 中以编程方式设置 App 入口点的主要内容,如果未能解决你的问题,请参考以下文章

为啥我无法在 AppDelegate 中以编程方式更改我的初始视图控制器?

在 iOS 6 中以编程方式打开地图应用

以编程方式切换 MVC 视图控制器 - iOS

如何在 MAC 中以编程方式设置 *** 连接?

在 C# 中以编程方式设置 Windows XP Embedded 区域设置

如何在 Objective C 中以编程方式设置集合视图?