6

我有一个基于 SplitViewController 的应用程序,它调用其他 UIViewController 以在详细信息部分通过替换显示它们...

我通过使用 MasterViewController 的 segues 向他们发送参数、信息、对象和一切正常

但是我的一些 UIViewControllers 通过使用 Segues 与其他 UIViewControllers 交互,因此,为了使它们正常工作,我需要将它们嵌入到 UINavigationController

我的问题是:

执行 segue 时如何将 UINavigationController 添加到我的 segue.destinationViewController:

  1. 从 masterViewController 传递我的参数
  2. 允许我的 UIViewControllers 通过使用 Segues 与其他 ViewControllers 交互

我想到了一个解决方案:-通过在 MasterViewController 中创建自定义委托或协议来解决参数问题

但我需要将 UISplitViewController 的委托设置为我的destinationViewController,以显示以纵向模式显示 MasterViewController 的按钮...

如果我在 prepareForSegue 方法中设置它,让 UINavigationControllers 持有我的 ViewControllers,我会将 UISplitViewController 的委托设置为 UINavigationController

在此先感谢您的帮助


编辑:这是我找到解决它的方法:

首先,我将 IBAction 分配给按钮,如果我的设备不是 iPad,它将执行正常的 segue...

- (IBAction)openExecutives:(id)sender {
    if ([[[UIDevice currentDevice]model] hasPrefix:@"iPad"]) {
        UsersListVC    *rightViewController    = [self.storyboard instantiateViewControllerWithIdentifier:@"UsersListVC"];
        [self showSplitViewController:rightViewController];
    }
    else
        [self performSegueWithIdentifier:@"viewSceneExecutives" sender:self];
}

这是我为使用自定义详细信息创建拆分视图而开发的功能...

-(void)showSplitViewController:(id)rightViewController{

    UIStoryboard *mainStoryboard        = [UIStoryboard storyboardWithName:@"iPad2" bundle: nil];

    UINavigationController  *leftNavController;
    UINavigationController  *rightNavController;

    MainMenuVC      *leftViewController     = [mainStoryboard instantiateViewControllerWithIdentifier:@"MainMenuVC"];

    leftNavController                   = [[UINavigationController alloc] initWithRootViewController:leftViewController];
    rightNavController                  = [[UINavigationController alloc] initWithRootViewController:rightViewController];

    leftNavController.toolbarHidden     = FALSE;
    rightNavController.toolbarHidden    = FALSE;


    UISplitViewController   *splitViewController    = [[UISplitViewController alloc] init];

    splitViewController.viewControllers             = [NSArray arrayWithObjects:leftNavController, rightNavController, nil];

    splitViewController.delegate        = rightViewController;

    self.view.window.rootViewController = splitViewController;
}

我所做的只是通过创建一个需要参数的函数(UIViewController)从一开始就重新绘制 splitViewController

4

1 回答 1

8

您应该在导航控制器中嵌入的 IB 中设置控制器。当您想从主视图控制器访问内容控制器时,您可以使用导航控制器属性 topViewController 来获取参考。所以在 prepareForSegue: 中,你可以这样做:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
      UINavigationController *dest = (UINavigationController *)segue.destinationViewController;
      self.detailViewController = (DetailViewController *)dest.topViewController;
      self.splitViewController.delegate = self.detailController;
}
于 2013-09-21T00:43:34.457 回答