1. Tab是如何实现的
从Xcode自带的模板 TabbedApplication来分析得出以下结论。
Tab的切换是在几个ViewController之间的切换。所以由Application来负责它们切换,由xxxAppDelegate来实现[UITabBarControllerDelegate]protocol。
仔细分析代码:
// Override point for customization after application launch.
》生成各个TabView的Controller
UIViewController *viewController1 = [[[wordlearnFirstViewController alloc] initWithNibName:@"wordlearnFirstViewController" bundle:nil] autorelease];
UIViewController *viewController2 = [[[wordlearnSecondViewController alloc] initWithNibName:@"wordlearnSecondViewController" bundle:nil] autorelease];
》生成一个系统提供的UITabBarController
self.tabBarController = [[[UITabBarController alloc] init] autorelease];
》将各个TabViewController放入TabBarController的容器中
self.tabBarController.viewControllers = [NSArray arrayWithObjects:viewController1, viewController2, nil];
》然后把TabBarController作为RootViewController交给应用程序的window
self.window.rootViewController = self.tabBarController;
[self.window makeKeyAndVisible];
return YES;
总结:
2. Navigation是如何实现的
从Xcode自带的模板 Master-DetailApplication来分析得出以下结论。
Master和Detail是2个不同的View(在不同的xib文件中定义),但是在一个viewController中对其进行切换。
仔细分析代码:
》当PreviousView中有一个按钮被点击,要求迁移到下一个画面时,触发。
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
》生成下一个画面的Controller(详细画面)
if (!self.detailViewController) {
self.detailViewController = [[[DrinkMixerDetailViewControlleralloc] initWithNibName:@"DrinkMixerDetailViewController"bundle:nil]autorelease];
}
》将详细画面放入NavigationStack中,显示。
[self.navigationControllerpushViewController:self.detailViewControlleranimated:YES];
}
总结:
3. Tab中的Navigation
结合上的分析,在以Tab为主的画面中如何实现Navigation,如下图。