0

我正在尝试为一个看起来像这样的应用程序构建界面: 应用程序的图像

我想使用情节提要来创建视图,但我现在无法弄清楚如何。我删除了一个连接到 2 个导航控制器的 SplitViewController:MasterNavigationController 和 DetailNavigationController(Master 是左侧菜单,Detail 是右侧)。

我开始在故事板中构建我所有的 ViewController。然后构建 NSArrays 来保存 Master 的每个菜单项所需的各种 ViewController 堆栈。因此,当用户点击菜单项时,我会使用以下方法将相应的 ViewController 堆栈加载到 DetailNavigationController 中:

- (void)setViewControllers:(NSArray *)viewControllers animated:(BOOL)animated

但现在我在想,我应该为每个菜单项创建一个单独的 DetailNavigationController。例如:

  • 最近的订单导航控制器
  • 客户导航控制器
  • 项目导航控制器
  • ...

然后,当用户点击一个菜单项时,整个 DetailNavigationController 将更改为相应的。

在使用情节提要时我应该如何构建界面?

4

1 回答 1

0

为每个详细视图使用单独的 viewController。您希望您的代码是分开的,因为它可能会很快混淆每个视图的所有不同功能。从那里,您可以轻松地更换细节。

子类 UISplitViewController 并将您的根 splitViewController 设置为该类。然后将此方法添加到您的 UISplitViewController 子类中:

-(void)setDetailControllerTo:(UIViewController *)detailController withNavControllerTitle:(NSString *)title {
[detailController view]; // this line forces the viewDidLoad method to be called

if (title) {
    UINavigationController *navController = [[UINavigationController alloc] init];
    [navController pushViewController:detailController animated:YES];
    detailController.title = title;

    NSArray *viewControllers=@[self.mainController.viewControllers[0],navController];
    self.mainController.viewControllers = viewControllers;
} else {
    NSArray *viewControllers=@[self.mainController.viewControllers[0],detailController];
    self.mainController.viewControllers = viewControllers;
}

}

要调用此方法,请从 tableView:didSelectRowAtIndexPath: 方法中的主视图控制器执行类似的操作

FixedSplitViewController *splitController = (FixedSplitViewController*) self.splitViewController;

CurrentEventViewController *controller = [self.storyboard instantiateViewControllerWithIdentifier:@"CurrentEventViewController"];
// add any setup code here
[splitController setDetailControllerTo:controller withNavControllerTitle:@"Current Event"];

如果您希望在纵向旋转中保持主视图可见,请将此方法添加到 SplitViewController 子类:

-(BOOL)splitViewController:(UISplitViewController *)svc shouldHideViewController:(UIViewController *)vc inOrientation:(UIInterfaceOrientation)orientation {
    return NO;
}

我的很多项目都需要 splitviewcontroller 始终显示主视图,所以我使用这个子类来防止主视图在纵向旋转时隐藏。

于 2013-11-08T16:07:58.723 回答