UISplitViewController:以编程方式使Popover控制器访问按钮出现在详细信息视图上

时间:2013-04-14 18:33:48

标签: ios ipad uisplitviewcontroller

我不知道如何更准确地问这个问题。我有一个主人/细节,我正在以编程方式创建整个事物。我是UISplitViewController的子类,并用两个控制器填充它,一切看起来应该是这样,直到我设置splitViewController:shouldHideViewController:inOrientation使它在纵向模式下返回YES。

当我让主人隐藏在肖像和肖像中时,如预期的那样,它会隐藏起来。但是,我无法在splitViewController:willHideViewController:withBarButtonItem:forPopoverController的详细信息视图顶部的导航栏中添加“主”按钮。这可能是因为我对如何完成这项任务有一个根本的误解。

我按照Apple的例子做了:

barButtonItem.title = NSLocalizedString(@"Master", @"Master");
[detailController.navigationItem setLeftBarButtonItem:barButtonItem animated:YES];

我没有收到任何错误,但也没有按钮。我推测也许这是因为我在子类中保存为detailController的是UINavigationController而不是UIViewController

非常感谢任何关于此的指导!

1 个答案:

答案 0 :(得分:0)

写完这篇文章之后,我意识到整个过程中有几处错误:

  1. splitViewController:willHideViewController:withBarButtonItem:forPopoverController真的希望您不仅可以设置barButtonItem标题,还可以将其添加到详细控制器的导航栏中。

  2. 如果您想以编程方式关闭弹出窗口,则必须将splitViewController:willHideViewController:withBarButtonItem:forPopoverController中提供的弹出窗口存储在主视图中。

  3. 所以,问题第一部分的答案是:

    barButtonItem.title = NSLocalizedString(@"Master", @"Master");
    [[detailController.topViewController navigationItem] setLeftBarButtonItem:barButtonItem animated:YES];
    

    这让我进入了可以在导航栏上设置UIBarButtonItem的UIViewController。我确信我可以直接在UINavigationController上完成此操作,但没有立即查看。

    这个问题的第二个未经讨论的部分涉及一旦看到popover后如何处理它。同样,我需要细节控制器知道实际的弹出窗口是什么,因此它可以被解雇,所以在splitViewController:willHideViewController:withBarButtonItem:forPopoverController中,我添加了如下代码:

    [masterController.navigationItem topViewController].popoverController = pc;
    

    其中pc是传递给委托方法的参数的值。然后,在我的主控制器中,我有一个UITableView,在didSelectRowAtIndexPath上,我只是这样做了:

    if(popoverController)
        [popoverController dismissPopoverAnimated:YES];
    

    这就是我今天在iOS学校学到的东西:)