TabBarController 和 NavigationController
Posted
技术标签:
【中文标题】TabBarController 和 NavigationController【英文标题】:TabBarController and NavigationController 【发布时间】:2013-06-24 13:21:31 【问题描述】:我正在制作一个应用程序,但我还是一个初学者,我正在尝试习惯 RootViewController 以及它应该如何设置。
在我的应用程序启动之初,我希望有一个不在我的 tabBarController 中的视图(设置为我的 rootViewController)。
我想问的是,我可以在我的 UITabBarController 启动之外有另一个视图,而不是在 tabBarController 的项目列表中吗?
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
FacebookFeedViewController *facebookClass = [[FacebookFeedViewController alloc] initWithNibName:@"FacebookFeedViewController" bundle:nil];
TwitterFeedViewController *twitterClass = [[TwitterFeedViewController alloc] initWithNibName:@"TwitterFeedViewController" bundle:nil];
LinkedInFeedViewController *linkClass = [[LinkedInFeedViewController alloc] initWithNibName:@"LinkedInFeedViewController" bundle:nil];
FTLFullFeedViewController *masterClass = [[FTLFullFeedViewController alloc] initWithNibName:@"FTLFullFeedViewController" bundle:nil];
/// tab button title
facebookClass.title = @"Facebook";
twitterClass.title = @"Twitter";
linkClass.title=@"LinkedIn";
masterClass.title=@"FTL";
// tab button Images
facebookClass.tabBarItem.image = [UIImage imageNamed:@"facebook_32"];
twitterClass.tabBarItem.image = [UIImage imageNamed:@"twitter_32"];
WelcomeViewController *welcomeClass= [[WelcomeViewController alloc] initWithNibName:@"WelcomeViewController" bundle:nil];
navController = [[ UINavigationController alloc] initWithRootViewController:welcomeClass];
UINavigationController *navController2 = [[UINavigationController alloc] initWithRootViewController:facebookClass];
UINavigationController *navController3 = [[UINavigationController alloc] initWithRootViewController:twitterClass];
UINavigationController *navController4 = [[UINavigationController alloc] initWithRootViewController:linkClass];
UINavigationController *navController5 = [[UINavigationController alloc] initWithRootViewController:masterClass];
self.tabBarController = [[UITabBarController alloc] init];
self.tabBarController.viewControllers = [NSArray arrayWithObjects:navController,navController5,navController2,navController3,navController4,nil];
self.window.rootViewController = self.tabBarController;
[self.window makeKeyAndVisible];
return YES;
【问题讨论】:
你使用的是什么版本的 XCode?span> 最新版本,4.6.2 你在使用 Storyboard 吗? 不不,我没有使用故事板。我很想先了解应用程序的导航是如何以编程方式工作的。 您是在使用 XIB 还是从头开始创建视图控制器? 【参考方案1】:我知道您已经选择了答案,但所做的只是将 UITabBar 视图推送到现有视图之上,而不是创建新的 UITabBarController 视图。根据我们的简短对话(最新的 XCode,没有 StoryBoard,使用 XIB),您将要创建一个 xib 作为 UITabBarController,然后将其推送到视图中......
View *view = [[View alloc] initWithNibName:@"myUITabBarXIB" bundle:nil];
view.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentModalViewController: view animated:YES];
当所需的操作发生时,这将显示您的 XIB 文件,但不会显示在现有视图控制器之上。
【讨论】:
非常感谢您的回答。这更有意义,这正是我所需要的。希望我能在未来帮助你。再次感谢。【参考方案2】:是的!当然可以。
[self.view addsubview:yourTabbar.view];
希望这会对你有所帮助。
【讨论】:
我应该在 appDelegate 中使用它还是在要在其中显示 tabBar 的视图中使用它? 它与视图重叠,我如何删除下面的视图? 你需要在appDelegate中添加导航控制器。之后何时导航 viewController--> subviewController。在这里添加标签栏。以上是关于TabBarController 和 NavigationController的主要内容,如果未能解决你的问题,请参考以下文章
使用 tabbarcontroller 代替 tab bar 和 tab bar item 的好处
TabBarController NAvigationController 和 UIViewController
TabbarController中ViewController的旋转
带有 NotificationCenter 和 TabBarController 的 UICollectionView 可区分数据源