我有一个iPhone项目,从一个标准的基于UIView的Window开始......当用户点击一个按钮时,它想要使用UITabBarController启动到一个新视图 - 类似于iTunes Connect应用程序在你之后的行为方式登录。 Apple文档中没有示例代码示例正在执行我想要的但我知道它可能,因为Apple已经在他们自己的应用程序中完成了它(另一个例子是iPhone的MobileMe iDisk应用程序)。
我已经尝试过标准的-presentModalViewController:animated:方法,但由于没有可以在UITabBarController中附加的视图,因此无效。
接下来,我将尝试在App Delegate中使用两个窗口XIB,看看我是否可以使用该方法。
如果您知道如何回答我的这个小问题,我将不胜感激。 =)
答案 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];