【问题标题】:How to show a ViewController in Swift only ones after downloading?下载后如何仅在 Swift 中显示 ViewController?
【发布时间】:2020-07-16 18:08:15
【问题描述】:

我正在创建一个具有 Onboarding 的应用程序。此 Onboarding 发生在仅具有此特定目的的 ViewController 上,这就是为什么我只希望 ViewController 在下载应用程序后显示它们。(主应用程序仅由一个 ViewController 组成)

这是我到目前为止所做的:

1) 我删除了故事板文件中的故事板入口点

2) 为两个 ViewController 分别输入 Storyboard ID

3) 在 AppDelegate 文件中编码,载入 ViewContoller 仅应在下载后第一次显示

我的问题:在模拟器上运行应用程序时,它只显示黑屏

我已经确保标识符和情节提要的名称是正确的。

(在我的 AppDelegate.swift 文件下方)

import UIKit
import Firebase
import FirebaseDatabase
import paper_onboarding


@UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate {


    var window: UIWindow?


    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.


        FirebaseApp.configure()


        window = UIWindow(frame: UIScreen.main.bounds)

        let sb = UIStoryboard(name: "Main", bundle: nil)
        var initialViewController = sb.instantiateViewController(withIdentifier: "Onboarding")



        let userDefaults = UserDefaults.standard

         if userDefaults.bool(forKey: "onboardingComplete") {
           initialViewController = sb.instantiateViewController(withIdentifier: "MainApp")
          }


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




        return true

    }

    // MARK: UISceneSession Lifecycle

    func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
        // Called when a new scene session is being created.
        // Use this method to select a configuration to create the new scene with.
        return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)
    }

    func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set<UISceneSession>) {
        // Called when the user discards a scene session.
        // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions.
        // Use this method to release any resources that were specific to the discarded scenes, as they will not return.
    }


}
``




【问题讨论】:

    标签: ios swift uiviewcontroller viewcontroller appdelegate


    【解决方案1】:

    对于黑屏:

    您是否在项目目标的General 选项卡中检查了 MAIN INERFACE?它应该设置为从下拉列表中选择的情节提要之一。还要检查Launch Screen File 是否选择了LaunchScreen 或任何其他必需的情节提要。

    对于入门作为第一个视图:

    应将主界面提供给载入视图控制器所在的情节提要,然后将该视图分配为初始视图控制器。

    如果您不理解逻辑,请告诉我。

    【讨论】:

    • 我已经确定我的主界面被选中了。这不是问题所在。一段时间后,我通过将稍作改动的代码放入 SceneDelegate.swift 文件中解决了我的问题。
    【解决方案2】:

    这个问题的解决方法不是使用 AppDelegate.swift 文件,而是使用 SceneDelegate.swift 文件。

    在我的 SceneDelegate.swift 文件下方

    import UIKit
    
    class SceneDelegate: UIResponder, UIWindowSceneDelegate {
    
        var window: UIWindow?
    
    
        func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
            // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`.
            // If using a storyboard, the `window` property will automatically be initialized and attached to the scene.
            // This delegate does not imply the connecting scene or session are new (see`application:configurationForConnectingSceneSession` instead).
    
            let sb = UIStoryboard(name: "Main", bundle: nil)
            var initialViewController = sb.instantiateViewController(withIdentifier: "Onboarding")
    
    
            let userDefaults = UserDefaults.standard
    
                    if userDefaults.bool(forKey: "onboardingComplete") {
                       initialViewController = sb.instantiateViewController(withIdentifier: "MainApp")
                     }
    
    
    
    
            if let windowScene = scene as? UIWindowScene {
    
                let window = UIWindow(windowScene: windowScene)
                 window.rootViewController = initialViewController
                 self.window = window
                window.makeKeyAndVisible()
             }
    
    
    
    
            guard let _ = (scene as? UIWindowScene) else { return }
        }
    
        func sceneDidDisconnect(_ scene: UIScene) {
            // Called as the scene is being released by the system.
            // This occurs shortly after the scene enters the background, or when its session is discarded.
            // Release any resources associated with this scene that can be re-created the next time the scene connects.
            // The scene may re-connect later, as its session was not neccessarily discarded (see `application:didDiscardSceneSessions` instead).
        }
    
        func sceneDidBecomeActive(_ scene: UIScene) {
            // Called when the scene has moved from an inactive state to an active state.
            // Use this method to restart any tasks that were paused (or not yet started) when the scene was inactive.
        }
    
        func sceneWillResignActive(_ scene: UIScene) {
            // Called when the scene will move from an active state to an inactive state.
            // This may occur due to temporary interruptions (ex. an incoming phone call).
        }
    
        func sceneWillEnterForeground(_ scene: UIScene) {
            // Called as the scene transitions from the background to the foreground.
            // Use this method to undo the changes made on entering the background.
        }
    
        func sceneDidEnterBackground(_ scene: UIScene) {
            // Called as the scene transitions from the foreground to the background.
            // Use this method to save data, release shared resources, and store enough scene-specific state information
            // to restore the scene back to its current state.
        }
    
    
    }
    
    

    【讨论】:

      猜你喜欢
      • 2018-01-12
      • 2017-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多