如何从 iOS 应用程序中删除场景委托?
Posted
技术标签:
【中文标题】如何从 iOS 应用程序中删除场景委托?【英文标题】:How to remove Scene Delegate from iOS Application? 【发布时间】:2019-11-23 10:14:55 【问题描述】:我在 Xcode 11.1 中创建了 ios 项目。我需要从应用程序中删除场景委托。
【问题讨论】:
【参考方案1】:您需要执行以下步骤:
-
从 App Delegate 中移除 Scene 委托方法并删除 Scene 委托文件。
您需要从 Info.plist 中删除 UIApplicationSceneManifest。
如果 AppDelegate 中不存在var window:UIWindow?
,您还需要添加它
【讨论】:
使用Objecitve C,我们需要在AppDelegate中添加一个window属性 添加了相同的内容。谢谢 带图指南***.com/a/60329391/4026902 在我的情况下不起作用,didFinishLaunchingWithOptions
不再被调用
由于 SceneDelegate 导致协调器模式无法正常工作,谢谢【参考方案2】:
Xcode(带storyboard)生成空项目的完整解决方案
-
删除
SceneDelegate.swift
文件
从Info.plist
文件中删除Application Scene Manifest
将此代码粘贴到您的 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
-
删除 SceneDelegate.swift 文件
从 Info.plist 文件中删除应用场景清单
从 AppDelegate 类中移除 UISceneSession 生命周期函数
在您的 AppDelegate 类中添加
var window: UIWindow?
作为实例属性
将@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】:-
删除
SceneDelegate.swift
文件
从Info.plist
文件中删除Application Scene Manifest
将var window: UIWindow?
添加到 AppDelegate.swift
将@main
替换为@UIApplicationMain
删除AppDelegate
中的UISceneSession Lifecycle
(函数)
【讨论】:
以上是关于如何从 iOS 应用程序中删除场景委托?的主要内容,如果未能解决你的问题,请参考以下文章