【问题标题】:How to structure ViewControllers using Storyboard for SplitView iPad app?如何使用 Storyboard for SplitView iPad 应用程序构建 ViewControllers?
【发布时间】:2013-02-20 22:20:12
【问题描述】:

我正在尝试为如下所示的应用构建界面:

我想使用 Storyboard 来创建视图,但我现在不知道该怎么做。我删除了一个连接到 2 个导航控制器的 SplitViewController:MasterNavigationController 和 DetailNavigationController(Master 是左侧菜单,Detail 是右侧菜单)。

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

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

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

  • RecentOrdersNavigationController
  • CustomersNavigationController
  • ItemsNavigationController
  • ...

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

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

【问题讨论】:

    标签: ios objective-c ipad storyboard uisplitviewcontroller


    【解决方案1】:

    为每个详细视图使用单独的 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 始终显示主视图,所以我使用这个子类来防止主视图在纵向旋转时隐藏。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多