iOS 转换旧项目使用 UI

iOS Convering an Old project to use UI

我正在尝试转换(慢慢现代化)一个旧的 iOS 项目以支持 UISceneDelegate。 然而,目前旧的 appdelegate 创建了一个 UIWindow 并将 UIViewController 附加到 finishedLaunching 中的 windows rootViewController。

因为我还没有准备好将我的应用程序转换为故事板,但有没有一种方法可以使用 UISceneDelegate 获得相同的结果?

请注意 mainViewController 不受 XIB 或情节提要支持,因此 UIWindowSceneSessionRoleApplication 部分中没有对任何 UI 文件的引用我的 info.plist

问候 Christian Stœr Andersen

在您的 UIWindowSceneDelegate 子类中实现以下方法来分配您的 UIViewController:

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
   guard let windowScene = scene as? UIWindowScene else {return}
   self.window = UIWindow(windowScene: windowScene)
   self.window!.rootViewController = YourViewController() // Instantiate your UIViewController 
   self.window!.makeKeyAndVisible()
}

与objective-c:

- (void)scene:(UIScene *)scene willConnectToSession:(UISceneSession *)session options:(UISceneConnectionOptions *)connectionOptions {
   self.window = [[UIWindow alloc] initWithWindowScene:(UIWindowScene *)scene];
   self.window.rootViewController = [[YourViewController alloc] init];
   [self.window makeKeyAndVisible];
}

如果您正在开发 Xamairn.iOS,这里是示例。

保留AppDelegate中的代码,并在SceneDelegate中添加以下代码。

[Export ("scene:willConnectToSession:options:")]
public void WillConnect (UIScene scene, UISceneSession session, UISceneConnectionOptions connectionOptions)
{
    UIWindowScene windowScene = scene as UIWindowScene;
    Window = new UIWindow(windowScene);
    Window.Frame = windowScene.CoordinateSpace.Bounds;
    Window.RootViewController = new YourViewController();
    Window.MakeKeyAndVisible ();            
}