【发布时间】:2011-10-07 21:09:37
【问题描述】:
我正在使用 Apple 提供的 splitViewController 模板。在特定操作上,我想显示rootViewController。不幸的是,我找不到一种方法可以(以编程方式)显示弹出框,就像您点击栏按钮项时一样。
有什么想法吗?谢谢!
【问题讨论】:
标签: ios ipad uisplitviewcontroller uipopovercontroller show
我正在使用 Apple 提供的 splitViewController 模板。在特定操作上,我想显示rootViewController。不幸的是,我找不到一种方法可以(以编程方式)显示弹出框,就像您点击栏按钮项时一样。
有什么想法吗?谢谢!
【问题讨论】:
标签: ios ipad uisplitviewcontroller uipopovercontroller show
您可以使用以下两种方法从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: 方法。您必须转发栏按钮(您还必须将其保存在变量中或浏览视图元素以找到您的需要)。在这种情况下,箭头方向将向上。 [它不是自定义视图,它是从中弹出的矩形。这将是你的栏按钮的矩形]
NSLog()你的rootViewController来检查它是否已经加载了。
[self.popoverController presentPopoverFromBarButtonItem:[[self.toolbar items] objectAtIndex:0] permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES];