SplitViewController 模板手动显示弹出框?

Posted

技术标签:

【中文标题】SplitViewController 模板手动显示弹出框?【英文标题】:SplitViewController Template show the popover manually? 【发布时间】:2011-10-07 21:09:37 【问题描述】:

我正在使用 Apple 提供的 splitViewController 模板。在特定操作上,我想显示rootViewController。不幸的是,我找不到一种方法可以(以编程方式)显示弹出框,就像您点击栏按钮项时一样。

有什么想法吗?谢谢!

【问题讨论】:

【参考方案1】:

您可以使用以下两种方法从barButtonItem 或您自己的矩形显示弹出框:

[self.popoverController presentPopoverFromRect:(CGRect) inView:(UIView *) permittedArrowDirections:(UIPopoverArrowDirection) animated:(BOOL)];
[self.popoverController presentPopoverFromBarButtonItem:(UIBarButtonItem *) permittedArrowDirections:(UIPopoverArrowDirection) animated:(BOOL)]

self.popoverController 是我的情况,它是一个存储弹出框的 ivar。我每次都设置这个变量:

- splitViewController:willHideViewController:withBarButtonItem:forPopoverController:

并在其对应方法中将其设置回nil

- splitViewController:willShowViewController:invalidatingBarButtonItem:

这是我的代码:

- (void)splitViewController: (UISplitViewController*)svc willHideViewController:(UIViewController *)aViewController withBarButtonItem:(UIBarButtonItem*)barButtonItem forPopoverController: (UIPopoverController*)pc 
    barButtonItem.title = @"42";
    self.navigationController.navigationBar.topItem.leftBarButtonItem = barButtonItem;
    self.popoverController = pc;


- (void)splitViewController: (UISplitViewController*)svc willShowViewController:(UIViewController *)aViewController invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem 
    self.navigationController.navigationBar.topItem.leftBarButtonItem = nil;
    self.popoverController = nil;

【讨论】:

然后使用presentPopoverFromBarButtonItem: 方法。您必须转发栏按钮(您还必须将其保存在变量中或浏览视图元素以找到您的需要)。在这种情况下,箭头方向将向上。 [它不是自定义视图,它是从中弹出的矩形。这将是你的栏按钮的矩形] 好的,我确实放入了viewDidAppear方法;显示弹出窗口,但未加载我的 tableView 中的数据。我猜那是因为在加载数据之前调用了该方法? 我相信你迟早会得到它。如果没有,请针对您的新问题提出另一个问题。你可以NSLog()你的rootViewController来检查它是否已经加载了。 这在 viewDidAppear 中对我来说很好用:[self.popoverController presentPopoverFromBarButtonItem:[[self.toolbar items] objectAtIndex:0] permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES]; 获取数据并在准备好时调用委托,然后重新加载表视图。 (更难看的是你可以在一秒钟后调用重新加载数据,这比发布软件更多用于调试目的)。如果您仍有问题,我再次建议您提出一个新问题。最好将问题分成较小的和平而不是大的和平。也许一部分会帮助别人;)

以上是关于SplitViewController 模板手动显示弹出框?的主要内容,如果未能解决你的问题,请参考以下文章

Splitviewcontroller 有两个表视图,委托问题

EF:手动调用 OpenConnection 时是不是应该显式关闭数据库连接

使用模板化成员函数显式实例化模板类

为啥尝试使用显式类型参数调用模板成员函数时会出错?

splitViewController 的 barButtonItem 未显示在屏幕上?

使用枚举和模板参数正确定义显式默认构造函数