【问题标题】:How to present two consecutive UIPopoverControllers properly?如何正确呈现两个连续的 UIPopoverControllers?
【发布时间】:2011-06-11 16:57:50
【问题描述】:

当用户点击 UIButton 时,我想在弹出框控制器中显示自定义菜单。然后我想呈现另一个菜单,当用户按下另一个按钮时使用完全相同的方法。

我的问题是这样的:当用户按下第一个按钮时,弹出框与我的菜单一起出现,这没关系。但是,当他按下第二个按钮时,我的应用程序没有关闭第一个弹出窗口,然后用第二个菜单显示第二个弹出窗口,而是关闭了第一个弹出窗口。然后当用户按下第二个按钮时,会出现第二个弹出框。因此,用户必须按两次才能看到第二个菜单。

这是我创建菜单和弹出框的方法:

CascadeMenuViewController *cascadeMenuViewController = [[CascadeMenuViewController alloc] initWithNibName:@"CascadeMenuViewController" bundle:nil];

UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:cascadeMenuViewController];
[cascadeMenuViewController release];
navigationController.navigationBar.barStyle = UIBarStyleBlack;

_popoverMenuView = [[UIPopoverController alloc] initWithContentViewController:navigationController];                    
[navigationController release];

[_popoverMenuView presentPopoverFromRect:_currentlyTouchedButtonView.frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionLeft animated:YES];

当用户从弹出框内的菜单中选择 sthg 时,我是这样关闭弹出框的:

if (_popoverMenuView) {
    [_popoverMenuView dismissPopoverAnimated:YES];
    [_popoverMenuView release];
    _popoverMenuView = nil;
}

你能告诉我我做错了什么吗?

提前谢谢...

【问题讨论】:

  • 当用户点击第二个按钮时,您是否关闭了第一个弹出框?或者你是如何尝试关闭它的?
  • 当用户从弹出窗口中选择一个菜单项时,我将关闭它。我的意思是从上面的代码开始,如果(_popoverMenuView)...然后当用户按下第二个按钮时,我正在创建一个新的 UIPopoverController 并将其分配给 _popover,就像我在用户按下第一个按钮时所做的那样。 (上面第一个代码sn-p)

标签: objective-c ipad uipopovercontroller


【解决方案1】:

发生的事情如下:

  1. 当弹出框显示时,在它之外的每一次点击都会简单地使弹出框被关闭,并且不会被转发到其他视图;

  2. 您可以使用passthroughViews 覆盖此机制,这是一个将点击转发给它们的视图列表;

  3. 需要注意的是,当转发发生时(即你点击passthroughViews中的一个视图),弹出框不会自动关闭;因此,在您的情况下,您将不得不自行关闭,当点击按钮时,您将打开第二个弹出窗口。

来自Apple Documents

当显示时,在弹出窗口外点击会导致弹出窗口自动消失。要允许用户与指定的视图交互而不关闭弹出框,您可以将一个或多个视图分配给 passthroughViews 属性。弹出窗口内的点击不会自动导致弹出窗口被关闭。您的视图和视图控制器代码必须显式处理弹出框内的操作和事件,并根据需要调用 dismissPopoverAnimated: 方法。

【讨论】:

  • 耶!这就是解决方案。在分配初始化之后,我将我的第一个和第二个按钮视图的数组作为弹出框的 passThroughViews。然后我在每次按下按钮时以及当用户从弹出框内的菜单中选择 sthg 时都将其关闭。谢谢塞尔吉奥!
猜你喜欢
  • 1970-01-01
  • 2014-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-08
  • 2022-01-12
  • 2011-06-13
相关资源
最近更新 更多