如何在Apple的样本多个详细信息视图的详细视图中推送视图控制器?

时间:2011-05-05 16:25:25

标签: iphone objective-c ipad uinavigationcontroller uisplitviewcontroller

我的目的是实现与原生iPad设置应用类似的功能。设置使用UITableViewController,因此,在详细信息视图中可以深入查看子视图,但我希望能够通过详细视图中的按钮点按视图控制器。

所以我试图扩展MultipleDetailViews示例应用程序:
1)SecondDetailViewController将属性navigationController(只读)设置为nil ...
2)所以我创建了一个新的UINavigationController并用它来推动我的控制器,但那不起作用。

我的代码:

if (!self.myNavigationController) {
    self.myNavigationController = [[UINavigationController alloc] initWithRootViewController:self];
}

FirstDetailViewController *controller = [[FirstDetailViewController alloc] initWithNibName:@"FirstDetailView" bundle:nil];

[[self myNavigationController] pushViewController:controller animated:YES];

[controller release], controller = nil;

还在init上尝试了UINavigationController方法,但效果不佳。

我是否尝试过在不实施自定义UISplitViewController的情况下无法做到的事情?我是否被SecondDetailViewController UINavigationBar的示例代码误导了?

3 个答案:

答案 0 :(得分:0)

为了能够这样做,你必须将viewController推送到数组中的每个viewController。像这样:

[[self.appDelegate.splitViewController.viewControllers objectAtIndex:0] pushViewController:rootLevel1 animated:YES];
[[self.appDelegate.splitViewController.viewControllers objectAtIndex:1] pushViewController:detailLevel1 animated:YES];

信用和代码: http://kshitizghimire.com.np/uisplitviewcontroller-multipledetailviews-with-navigation-controller/

答案 1 :(得分:0)

我正在寻找类似问题的解决方案。在我的情况下,我希望tableview链接到多个详细视图,具体取决于选择。我可以在一个viewcontroller上覆盖数据但是正在寻求更好的解决方案。这就是我做的。它比我迄今为止发现的一些复杂和过时的选项更简单,效果更好。

我只是在身份检查器中将一个故事板ID提供给我想要显示在detailview(“second”)中的viewcontroller,并在didSelectRowAtIndexPath上添加:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
 TimeDetailViewController *detail = [self.storyboard instantiateViewControllerWithIdentifier:@"second"];

[[self.splitViewController.viewControllers objectAtIndex:1] pushViewController:detail animated:YES];

  }

因此,当有人按下主视图中的单元格时,会推送详细视图。

一个简单的if语句可以切换显示的视图:

   if ([[self.selfRootMenuArray objectAtIndex:indexPath.row] isEqual: @"Second Choice"]) {
        TimeDetailViewController *detail = [self.storyboard instantiateViewControllerWithIdentifier:@"second"];

[[self.splitViewController.viewControllers objectAtIndex:1] pushViewController:detail animated:YES];

  else if ([[self.selfRootMenuArray objectAtIndex:indexPath.row] isEqual: @"First Choice"]) {
        TimeDetailViewController *detail = [self.storyboard instantiateViewControllerWithIdentifier:@"first"];

[[self.splitViewController.viewControllers objectAtIndex:1] pushViewController:detail animated:YES];

    };

您可以简单地使用按钮,开关或其他任何内容而不是表格视图,但重点是通过在“身份检查器”中添加“故事板ID”

并简单地通过引用“Storyboard ID”来实例化视图控制器,然后将其推送到索引1(详细信息侧)的拆分视图控制器,其简单快速

 TimeDetailViewController *detail = [self.storyboard instantiateViewControllerWithIdentifier:@"second"];

[[self.splitViewController.viewControllers objectAtIndex:1] pushViewController:detail animated:YES];

答案 2 :(得分:0)

您可以使用:

showDetailViewController(viewController, sender: nil)

Apple关于它的文档为here