如何正确呈现两个连续的UIPopoverController?

时间:2011-06-10 19:25:57

标签: objective-c ipad uipopovercontroller

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

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

以下是我创建菜单和popover的方法:

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];

当用户从popover中的菜单中选择sthg时,以下是我解除popover的方法:

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

你能告诉我我做错了吗?

提前......

1 个答案:

答案 0 :(得分:0)

发生的事情如下:

  1. 当显示弹出窗口时,它外面的每个点击只会使弹出窗口被解除,并且不会被转发到其他视图;

  2. 您可以使用passthroughViews覆盖此机制,passthroughViews是一个视图列表,可以获取转发给他们的点按;

  3. 必须注意的是,当转发发生时(即,你点击{{1}}中的一个视图),弹出窗口不会自动被解除;所以,在你的情况下,你将不得不自己解雇,当点击按钮时,你将打开第二个弹出窗口。

  4. 来自Apple Documents

      

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