美文网首页Swift开发指导
Xcode 11版本纯代码设置window.rootviewCo

Xcode 11版本纯代码设置window.rootviewCo

作者: tp夕阳武士 | 来源:发表于2019-11-12 16:01 被阅读0次

    更新了Xcode11 以后选择OC语言创建新工程的时候,可以发现工程里多了两个delegate文件:SceneDelegate.h/SceneDelegate.m.对于已经习惯用纯代码的朋友,如果还用以往的方式,在AppDelegate.m里面设置window.rootViewController,就会发现程序会报错了.下面直接说两种解决方案:

    方案1:

    03103A0768BB402B565E295733F41C0C.jpg
    在项目的info.plist文件中,把图中箭头两行都删除,然后就可以在SceneDelegate.m里面通过代码来实现window.rootViewController的设置,这个地方代码也是有点变化的,代码如下:
    - (void)scene:(UIScene *)scene willConnectToSession:(UISceneSession *)session options:(UISceneConnectionOptions *)connectionOptions {
        
        if ([scene isKindOfClass:[UIWindowScene class]]) {
            UIWindowScene *windowScene = (UIWindowScene *)scene;
            UIWindow *window = [[UIWindow alloc] initWithWindowScene:windowScene];
            UIViewController *vc = [[UIViewController alloc] init];
            vc.view.backgroundColor = [UIColor redColor];
            window.rootViewController = vc;
            self.window = window;
            window.backgroundColor = [UIColor whiteColor];
            [window makeKeyAndVisible];
        }
    }
    

    方案2:

    把info.plist 文件中的 Application Scene Manifest 这一项直接删除,
    然后在AppDelegate.h中添加一个属性:window,Xcode11把这个属性删除了需要我们手动添加回来;然后还要删除AppDelegate.m中的两个方法:

    //- (UISceneConfiguration *)application:(UIApplication *)application configurationForConnectingSceneSession:(UISceneSession *)connectingSceneSession options:(UISceneConnectionOptions *)options {
    //    // Called when a new scene session is being created.
    //    // Use this method to select a configuration to create the new scene with.
    //    return [[UISceneConfiguration alloc] initWithName:@"Default Configuration" sessionRole:connectingSceneSession.role];
    //}
    
    
    //- (void)application:(UIApplication *)application didDiscardSceneSessions:(NSSet<UISceneSession *> *)sceneSessions {
    //    // 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.
    //}
    

    做完上面这些动作,就可以按照XCode11以前的方式,在AppDelegate.h中设置window.rootviewcontroller了.

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
        
        self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
        UIViewController *v1 = [UIViewController new];
        UINavigationController *nvc = [[UINavigationController alloc] initWithRootViewController:v1];
        v1.view.backgroundColor = [UIColor redColor];
        self.window.rootViewController = nvc;
        [self.window makeKeyAndVisible];
        return YES;
    }
    
    

    如果是习惯用swift朋友就更加方便了,因为只要在创建项目的时候勾选SwiftUI,放弃storyboard就可以了:


    image.png

    相关文章

      网友评论

        本文标题:Xcode 11版本纯代码设置window.rootviewCo

        本文链接:https://www.haomeiwen.com/subject/rlkqictx.html