我不知道如何更准确地问这个问题。我有一个主人/细节,我正在以编程方式创建整个事物。我是UISplitViewController的子类,并用两个控制器填充它,一切看起来应该是这样,直到我设置splitViewController:shouldHideViewController:inOrientation
使它在纵向模式下返回YES。
当我让主人隐藏在肖像和肖像中时,如预期的那样,它会隐藏起来。但是,我无法在splitViewController:willHideViewController:withBarButtonItem:forPopoverController
的详细信息视图顶部的导航栏中添加“主”按钮。这可能是因为我对如何完成这项任务有一个根本的误解。
我按照Apple的例子做了:
barButtonItem.title = NSLocalizedString(@"Master", @"Master");
[detailController.navigationItem setLeftBarButtonItem:barButtonItem animated:YES];
我没有收到任何错误,但也没有按钮。我推测也许这是因为我在子类中保存为detailController
的是UINavigationController
而不是UIViewController
。
非常感谢任何关于此的指导!
答案 0 :(得分:0)
写完这篇文章之后,我意识到整个过程中有几处错误:
splitViewController:willHideViewController:withBarButtonItem:forPopoverController
真的希望您不仅可以设置barButtonItem
标题,还可以将其添加到详细控制器的导航栏中。
如果您想以编程方式关闭弹出窗口,则必须将splitViewController:willHideViewController:withBarButtonItem:forPopoverController
中提供的弹出窗口存储在主视图中。
所以,问题第一部分的答案是:
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学校学到的东西:)