【发布时间】:2011-12-18 12:06:55
【问题描述】:
我在理解 Master-Detail Application 模板的所有“具体细节”如何使用 Xcode 4.2(没有 MainWindow.xib 以及其他更改)工作时遇到了一些麻烦。在“AppDelegate”中,我们有以下代码:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
MasterViewController *masterViewController = [[MasterViewController alloc] initWithNibName:@"MasterViewController" bundle:nil];
UINavigationController *masterNavigationController = [[UINavigationController alloc] initWithRootViewController:masterViewController];
DetailViewController *detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil];
UINavigationController *detailNavigationController = [[UINavigationController alloc] initWithRootViewController:detailViewController];
self.splitViewController = [[UISplitViewController alloc] init];
self.splitViewController.delegate = detailViewController;
self.splitViewController.viewControllers = [NSArray arrayWithObjects:masterNavigationController, detailNavigationController, nil];
self.window.rootViewController = self.splitViewController;
[self.window makeKeyAndVisible];
return YES;
}
我看到窗口是以编程方式创建的,而不是使用一开始在以前版本的 Xcode 中使用的 MainWindow.xib,以及为提供的“Master”和“Detail”视图控制器类实例化对象使用模板并将它们用于单独的 UINavigationControllers。然后为 splitViewController 属性分配一个新分配的 UISplitViewController 对象,将 detailViewController 分配为“委托”,并创建一个包含两个 UINavigationController 作为“viewControllers”的数组。然后给window.rootViewController分配了这个splitViewController对象。
我的主要问题是
1) 为什么我需要两个“UINavigationControllers”?我不能只使用“主”和“详细”视图控制器本身创建“viewController”数组吗?”
2) 将“detailViewController”设置为“委托”有什么作用?什么实际上被委派了?
3) 最后,如果我想将其他项目推送到“DetailViewController”堆栈,我是否只需使用“DetailViewController”类通过“didSelectRow..”方法推送,还是需要更新改为 self.splitViewController.viewControllers 属性?
【问题讨论】:
标签: uinavigationcontroller ios5 uisplitviewcontroller xcode4.2