【问题标题】:Need help understanding new Xcode 4.2 Master-Detail Application Template需要帮助了解新的 Xcode 4.2 主从应用程序模板
【发布时间】: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


    【解决方案1】:

    1) 为什么我需要两个“UINavigationControllers”?我不能只使用“主”和“详细”视图控制器本身创建“viewController”数组吗?”

    你不需要。但这是一种方式。您可以推送masterViewControllerdetailViewController。查看 Storyboard 中的布局。使用 segue,您可以随意更改每一侧的控制器。

    2) 将“detailViewController”设置为“委托”有什么作用?实际委托的是什么?

    UISplitViewget 已授权。 detailViewController 将负责在纵向和横向模式下更改界面。请参阅documentation 中的UISplitViewDelegate

    显示和隐藏视图控制器

    – splitViewController:shouldHideViewController:inOrientation:
    – splitViewController:willHideViewController:withBarButtonItem:forPopoverController:
    – splitViewController:willShowViewController:invalidatingBarButtonItem:
    – splitViewController:popoverController:willPresentViewController:
    

    3) 最后,如果我想将其他项目推送到“DetailViewController”堆栈,我是否只需使用“DetailViewController”类通过“didSelectRow..”方法推送,还是需要更新改为 self.splitViewController.viewControllers 属性?

    是的,您可以使用 tableView 选择推入masterViewController。您可以使用masterViewControllerstack 上的新控制器通过推入

    - (void)viewDidAppear:(BOOL)animated
    

    你可以用任何你喜欢的方式推动。您不必更新 self.splitViewController.viewControllers 属性。也许您必须将代理设置为您的新detailViewController

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-21
      • 2013-03-17
      • 2018-03-06
      • 2012-04-25
      • 1970-01-01
      • 1970-01-01
      • 2018-08-28
      • 1970-01-01
      相关资源
      最近更新 更多