0

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

当我让主人隐藏在肖像和肖像颠倒时,正如预期的那样,它隐藏了。但是,我无法将“主”按钮添加到splitViewController:willHideViewController:withBarButtonItem:forPopoverController. 这可能是因为我对我应该如何完成这项任务有一个根本的误解。

我按照苹果的例子做了:

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

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

非常感谢您对此的任何指导!

4

1 回答 1

0

写完后,我意识到在连接整个过程中有几个错误:

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

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

因此,问题第一部分的答案是:

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

这让我找到了可以UIBarButtonItem在导航栏上设置 a 的 UIViewController。我敢肯定我可以直接在上面做这个,UINavigationController但没有立即看到如何做。

这个问题的第二部分,即未提出的部分,涉及在弹出框可见后如何处理它。同样,我需要细节控制器知道实际的弹出框是什么,以便可以将其关闭,所以在 中splitViewController:willHideViewController:withBarButtonItem:forPopoverController,我添加了如下代码:

[masterController.navigationItem topViewController].popoverController = pc;

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

if(popoverController)
    [popoverController dismissPopoverAnimated:YES];

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

于 2013-04-14T19:50:53.430 回答