确定要在应用程序启动时加载哪个类和xib文件的代码

时间:2010-02-18 02:58:32

标签: iphone uiview interface-builder uinavigationcontroller uitabbarcontroller

我正在更改我的应用以添加应用内购买。当我最初设置应用程序时,我使用了界面构建器,但现在我需要确定哪个类和&根据用户是否购买了某项功能,在应用启动时加载的xib文件。

我的应用程序设置了一个标签栏控制器,每个标签都有一个naviagion控制器。在MainWindow.xib文件中,我告诉IB使用HomeView.xib和HomeView类。现在我需要检查是否已购买功能并加载HomeView或HomeView2。我不知道应用程序在哪里告诉naviagionController要加载哪个类和视图,因为我之前在界面生成器中设置了所有这些。

我可以在HomeViewNavigationController中做出这个决定而不是IB自动为我做出这个决定吗?

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

您可以在Info.plist中设置要加载的xib。在启动时,系统将自动加载此xib。虽然很容易更改Info.plist文件中的xib名称,但它会被Apple拒绝。

这就是我要做的事情:不要使用xib,至少对于你提到的两个。而是在applicationDidFinishLaunching:(NSNotification *)通知

中创建所有内容
- (void)applicationDidFinishLaunching:(NSNotification *)notification
{
   UIWindow *window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

   UITabBarController *t = [[UITabBarController alloc] initWithFrame:NSMakeRect(0, 0, 0, 0)];
   // add the other view controllers

   if(/* check for which xib to load */)
   {
      // change whatever you need to change
   }
   else
   {
      // ...
   }

   [window addSubview:[t view]];
   [window makeKeyAndVisible];
}

答案 1 :(得分:1)

保持简单。

在HomeView.xib中,您可以加载两个不同的视图。让xib中的UIViewController视图为“容器视图”。在HomeView控制器的viewDidLoad中执行检测代码,然后将正确的视图添加为子视图。

- (void)viewDidLoad
{
    [super viewDidLoad];

    if (featureWasPaidFor)
    {
        [self.view addSubview:self.homePurchaseView];
    } else {
        [self.view addSubview:self.homeNonPurchaseView];
    }
}