根据应用程序运行的设备从不同的xib初始化rootViewController

时间:2011-01-17 17:33:41

标签: objective-c interface-builder ios-4.2

嘿伙计们, 我有以下问题: 我有一个IPad应用程序,现在我希望它也可以在iPhone上运行。 (我知道它应该反过来,但我无法改变它)。 所以现在我想通过使用来决定我需要哪个视图:

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
     // The device is an iPad running iOS 3.2 or later.
}
else {
     // The device is an iPhone or iPod touch.
}

适用于RootViewController的所有视图 无论我为RootViewController设置xib,它总是显示我为IPad-App定义的那个。

这是我在App-Delegate中的代码:

viewController = [VoycerUniversalAppViewController sharedInstance]; 


UINavigationController *myNavigationController = [[UINavigationController alloc] initWithRootViewController:viewController];
[self.window addSubview:myNavigationController.view];   
//[self.window addSubview:self.vcSplashScreen.view];
[self.window addSubview:viewController.view];
[self.window makeKeyAndVisible];

return YES;  


这是我的[VoycerUniversalAppViewController sharedInstance]中的代码:

+ (VoycerUniversalAppViewController*) sharedInstance 
{
    @synchronized(self) 
    {
        if(sharedInstance == nil) 
        {
            // only allocate here - assignment is done in the alloc method
            if (![AppState sharedInstance].loggedIn) 
            {
                [AppState sharedInstance ].loggedIn = FALSE;            
            }
        }
    }   
    return sharedInstance;
}

+ (id) allocWithZone:(NSZone*)zone {
    @synchronized(self) {
        if(sharedInstance == nil) {
            if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) 
            {
                // The device is an iPad running iOS 3.2 or later.
                NSLog(@"The device is an iPad running iOS 3.2 or later.");
                sharedInstance = [[super allocWithZone:zone] initWithNibName:@"VoycerUniversalAppViewController" bundle:nil];
            }
            else {
                // The device is an iPhone or iPod touch.
                NSLog(@"The device is an iPhone or iPod touch.");
                sharedInstance = [[super allocWithZone:zone] initWithNibName:@"VoycerUniversalAppIPhoneViewController" bundle:nil];
            }   
            // allocate and assign instance variable on first allocation                    
            return sharedInstance;
        }
    }
    return nil;
}


我几乎无处不在,我想如果我错过了一些设置或什么,但我找不到任何 你有没有人有想法,为什么不断加载VoycerUnversalAppViewController而不是另一个? 两个Xib都链接到同一个班级 如果解决方案是一个非常简单的解决方案,请不要怪我,我是xcode,IB和objective-c的新手(我现在在objective-c中编码1个半月)。

提前谢谢。
Maverick1st。

1 个答案:

答案 0 :(得分:2)

对于主NIB,info.plist文件中有一些设置:NSMainNibFileNSMainNibFile~ipad

在NIB文件中,您可以创建应用程序委托并设置导航控制器。