如何在应用程序启动时从应用程序委托加载不同的视图控制器类(即从应用程序委托)

我正在开发一个屏幕,我想加载视图控制器基于condition.ie条件它应该从应用程序委托在应用程序启动时加载特定的视图控制器类。

if(condition success) { //Load viewcontroller1 } else { //Load viewcontroller2 } 

我怎样才能做到这一点,请帮助我

只要打开Xcode,创build一个新的项目,使其通用 (iPad / iPhone),你会看到一个这样的例子。 它会为您创build两个.xib文件。 一个用于iPad,一个用于iPhone。

然后,应用程序委托做到这一点:

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; // Override point for customization after application launch. if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) { self.viewController = [[ViewController alloc] initWithNibName:@"ViewController_iPhone" bundle:nil]; } else { self.viewController = [[ViewController alloc] initWithNibName:@"ViewController_iPad" bundle:nil]; } 

在这种情况下,它为两个.xibs使用相同的ViewController类(ViewController.h和.m)。 但是,你当然也可以改变这一点。 只需进入Xcodegraphicsdevise器(曾经是Interface Builder)中的每个.xib,select.xib,select文件的所有者,然后在Inspector选项卡(属性…通常在右边),您可以select一个自定义类combobox。

所以,如果你需要一个不同的Objective-C UIViewController子类,你可以这样做。 请记住更改上面的代码以匹配( [ViewController alloc] )。

你可以看到苹果所做的一样。 创build一个通用应用程序 在appDelegate你可以看到

 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]; } 

基于一个条件,他们加载不同的视图控制器。