【问题标题】:How to remove Scene Delegate from iOS Application?如何从 iOS 应用程序中删除场景委托?
【发布时间】:2019-11-23 10:14:55
【问题描述】:

我在 Xcode 11.1 中创建了 iOS 项目。我需要从应用程序中删除场景委托。

【问题讨论】:

    标签: ios swift


    【解决方案1】:

    您需要执行以下步骤:

    1. 从 App Delegate 中移除 Scene 委托方法并删除 Scene 委托文件。
    2. 您需要从 Info.plist 中删除 UIApplicationSceneManifest。

    如果 AppDelegate 中不存在var window:UIWindow?,您还需要添加它

    【讨论】:

    • 使用Objecitve C,我们需要在AppDelegate中添加一个window属性
    • 添加了相同的内容。谢谢
    • 在我的情况下不起作用,didFinishLaunchingWithOptions 不再被调用
    • 由于 SceneDelegate 导致协调器模式无法正常工作,谢谢
    【解决方案2】:

    Xcode(带storyboard)生成空项目的完整解决方案

    1. 删除SceneDelegate.swift文件
    2. Info.plist 文件中删除Application Scene Manifest
    3. 将此代码粘贴到您的 AppDelegate.swift 文件中
    
    import UIKit
    
    @main
    class AppDelegate: UIResponder, UIApplicationDelegate {
    
        var window:UIWindow?
    
        func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
            self.window = UIWindow(frame: UIScreen.main.bounds)
            window?.rootViewController = UIStoryboard(name: "Main", bundle: nil).instantiateInitialViewController()
            window?.makeKeyAndVisible()
    
            return true
        }
    }
    

    【讨论】:

      【解决方案3】:

      要添加到已接受的答案:您还需要在 AppDelegate 中写下:

       self.window = UIWindow(frame: UIScreen.main.bounds)
       let controller = MyRootViewController()
       window?.rootViewController = controller
       window?.makeKeyAndVisible()
      

      【讨论】:

        【解决方案4】:

        添加到milzi's answer

        1. 删除 SceneDelegate.swift 文件
        2. 从 Info.plist 文件中删除应用场景清单
        3. 从 AppDelegate 类中移除 UISceneSession 生命周期函数
        4. 在您的 AppDelegate 类中添加 var window: UIWindow? 作为实例属性
        5. @main属性替换为@UIApplicationMain属性(这保存为手动创建和分配窗口)

        以下是更改后 AppDelegate 的外观:

        import UIKit
        
        @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.
                return true
            }
        
        
        }
        

        【讨论】:

          【解决方案5】:

          以防万一您在Objective-C 中进行开发,请在AppDelegate.h 文件中添加window 属性,如下所示:

          @interface AppDelegate : UIResponder <UIApplicationDelegate>
          @property (strong, nonatomic) UIWindow *window;
          @end
          

          无需初始化window。它会自动运行。

          【讨论】:

            【解决方案6】:
            1. 删除SceneDelegate.swift文件
            2. Info.plist 文件中删除Application Scene Manifest
            3. var window: UIWindow? 添加到 AppDelegate.swift
            4. @main 替换为@UIApplicationMain
            5. 删除AppDelegate中的UISceneSession Lifecycle(函数)

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2020-01-30
              • 2020-01-30
              • 2021-11-14
              • 2020-02-20
              • 2020-07-06
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多