如何更改 rootViewController 的视图?

Posted

技术标签:

【中文标题】如何更改 rootViewController 的视图?【英文标题】:How to change rootViewController's view? 【发布时间】:2012-03-02 05:16:09 【问题描述】:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
    // Override point for customization after application launch.
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) 
        self.viewController = [[[ViewController alloc] initWithNibName:@"ViewController_iPhone" bundle:nil] autorelease];
     else 
        self.viewController = [[[ViewController alloc] initWithNibName:@"ViewController_iPad" bundle:nil] autorelease];
    

    CustomView1 *CustomView = [[CustomView1 alloc]initWithFrame:[[UIScreen mainScreen] bounds]];
    self.viewController.view = CustomView;
    self.window.rootViewController = self.viewController;
    [self.window makeKeyAndVisible];

    return YES;

这出现在 AppDelegate.m 中

我想将rootViewcontroller的视图更改为CustomView,并尝试了上面的代码,但是背景颜色仍然是黑色并且不接受触摸事件。

哪里出错了?

【问题讨论】:

【参考方案1】:

我不确定问题出在哪里,但我有 2 条建议。

1) 改变

CustomView1 *CustomView = [[CustomView1 alloc]initWithFrame:[[UIScreen mainScreen] bounds]];
self.viewController.view = CustomView;

CustomView1 *CustomView = [[CustomView1 alloc]initWithFrame:[[UIScreen mainScreen] bounds]];
[self.viewController.view addSubview:CustomView];

2) 在您引用的两个 .xib 文件中,转到顶视图并将其更改为使用自定义类。然后你就可以让应用正常启动了

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
    // Override point for customization after application launch.
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) 
        self.viewController = [[[ViewController alloc] initWithNibName:@"ViewController_iPhone" bundle:nil] autorelease];
     else 
        self.viewController = [[[ViewController alloc] initWithNibName:@"ViewController_iPad" bundle:nil] autorelease];
    
    self.window.rootViewController = self.viewController;
    [self.window makeKeyAndVisible];

    return YES;

旁注: 您应该避免命名以大写字母开头的变量。许多编码标准的类以大写字母开头,变量以小写字母开头。

【讨论】:

【参考方案2】:

如果您需要两个不同的视图控制器来管理一个视图类,您应该让视图控制器在它们的loadView 方法或它们的 nib 文件中加载正确的视图类。我猜你代码中的控制器使用笔尖。如果是这样,请编辑 nib 以将视图类设置为 CustomView1

CustomView1 是一个不幸的类名选择,恕我直言,因为它没有任何意义。

【讨论】:

以上是关于如何更改 rootViewController 的视图?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Xcode 12 的新 SwiftUI App 生命周期中更改 window.rootViewController?

在 RootViewController 中单击按钮更改 DetailViewController

更改 rootviewcontroller 后,快速导航控制器返回 nil

在 applicaitonWillEnterForeground 中更改 rootViewController

更改 rootViewController 时 UIWindow 导致黑屏

如何在 ipad 的另一个 ViewController 中重新加载 rootViewController