如何将UITabBarController添加到现有项目中

时间:2011-03-30 17:04:32

标签: iphone objective-c cocoa uitabbarcontroller modal-dialog

我有一个iPhone项目,从一个标准的基于UIView的Window开始......当用户点击一个按钮时,它想要使用UITabBarController启动到一个新视图 - 类似于iTunes Connect应用程序在你之后的行为方式登录。 Apple文档中没有示例代码示例正在执行我想要的但我知道它可能,因为Apple已经在他们自己的应用程序中完成了它(另一个例子是iPhone的MobileMe iDisk应用程序)。

我已经尝试过标准的-presentModalViewController:animated:方法,但由于没有可以在UITabBarController中附加的视图,因此无效。

接下来,我将尝试在App Delegate中使用两个窗口XIB,看看我是否可以使用该方法。

如果您知道如何回答我的这个小问题,我将不胜感激。 =)

4 个答案:

答案 0 :(得分:1)

我最终做的是:

在我的App Delegate中,我的界面中有以下内容:

@interface myAppDelegate : NSObject <UIApplicationDelegate> {
    UIWindow * window;
    LauncherViewController * startup;
    UITabBarController * tabs;
}
@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet LauncherViewController * startup;
@property (nonatomic, retain) IBOutlet UITabBarController * tabs;
@end

在我的实现文件中,我将以下内容添加到应用启动功能:

- (BOOL)application:(UIApplication *)application 
        didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.

    [self.window addSubview:self.startup.view];
    [self.window makeKeyAndVisible];

    NSNotificationCenter * notifier = [NSNotificationCenter defaultCenter];

    [notifier addObserver:self
                 selector:@selector(launch)
                     name:MyAppLoginInitializedNotification
                   object:nil];

    [notifier addObserver:self
                 selector:@selector(logout)
                     name:MyAppLogoutNotification
                   object:nil];

    return YES;
}

- (void) launch {
    [self.startup.view removeFromSuperview];
    [self.window addSubview:tabs.view];
    [self.window makeKeyWindow];
}

- (void) logout {
    [self.tabs.view removeFromSuperview];
    [self.window addSubview:startup.view];
    [self.window makeKeyWindow];
}

我的主XIB包含定义为LauncherViewController的标准UIViewController以及通用的UITabBarController。只要我的主启动器控制器验证用户凭据并发送MyAppLoginInitializedNotification,应用代理就会从启动器切换到选项卡视图,以便我继续使用我的应用逻辑。

答案 1 :(得分:0)

UITabBarController实际上只是UIViewController的子类,因此-presentModalViewController:animated:应该有效:

UITabBarController *someController = [[UITabBarController alloc] init];
someController.viewControllers = /* your View Controllers here */
[self presentModalViewController:someController animated:NO];

答案 2 :(得分:0)

如果我正确理解你的问题,你想在你在问题中提到的第一个视图之后启动UITabBarController视图,我附加了一个链接,你需要做同样的事情,除非你在UITabBarController视图出现之前有一个额外的视图,希望它会给你一个指导。

http://www.mobisoftinfotech.com/blog/iphone/iphone-tabbar-uitabbarcontroller-tutorial/

答案 3 :(得分:0)

我认为你不必在nib文件中重新添加UITabBarController。只需在代码中创建它,将其添加为上面的海报所示,你就应该好好去。这里有一些适合我的代码。

    UITabBarController *nextController = [[UITabBarController alloc] init];

    FirstController *firstView = [[FirstController alloc] initWithNibName:@"FirstView" bundle:nil];
    SecondController *secondView = [[SecondController alloc] initWithNibName:@"SecondView" bundle:nil];
    ThirdController *thirdView = [[ThirdController alloc] initWithNibName:@"ThirdView" bundle:nil];

    [nextController setViewControllers:[NSArray arrayWithObjects:firstView, secondView, thirdView, nil] animated:NO];

直到这一点它应该是相同的,但我正在将一个tabbar控制器推入uinavgiationcontroller,所以这就是我们可能会有所不同的地方。我这样做:

    [self.navigationController pushViewController:nextController animated:YES];