2011-06-10 67 views
1

我想在用户点击UIButton时在弹出窗口控制器中显示自定义菜单。然后我想呈现另一个菜单,当用户按下另一个按钮时使用完全相同的方法。如何正确显示两个连续的UIPopoverControllers?

我的问题是这样的:当用户按下第一个按钮时,弹出窗口出现在我的菜单中,这没关系。但是当他按下第二个按钮时,我的应用程序只是放弃了第一个popover,而不是解散第一个popover,然后用第二个菜单展示第二个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]; 

这里是我解雇酥料饼,当用户选择从酥料饼里面的菜单STHG:

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

灿你告诉我我做错了什么?

THX提前...

+0

当用户点击第二个按钮时,您是否解散了第一个弹出窗口?或者你如何尝试并关闭它? – sergio 2011-06-10 19:51:17

+0

当用户从弹出窗口中选择一个菜单项时,我将其解散。我的意思是从上面的代码开始if(_popoverMenuView)...然后当用户按下第二个按钮时,我创建一个新的UIPopoverController并将其分配给_popover,就像我在用户按下第一个按钮时那样。 (上面的第一个代码片段) – aslisabanci 2011-06-11 07:45:02

回答

0

正在发生的事情是这样的:

  1. 时弹出了显示,它的外面每个抽头只会使弹出到被解雇,并不会转发给其他观点;

  2. 你可以通过使用passthroughViews来覆盖这个机制,它是一个获取水龙头转发给它们的视图列表;

  3. 必须注意的是,当转发发生时(即,您点击passthroughViews中的某个视图),弹出窗口不会自动消失;所以,就你的情况而言,你将不得不自行解雇,而当水龙头在按钮上时,你会打开第二个弹出窗口。

Apple Documents

显示时,敲击酥料饼的窗口之外导致酥料饼被自动解除。要允许用户与指定的视图进行交互但不关闭弹出窗口,可以将一个或多个视图分配给passthroughViews属性。弹出窗口内的点击不会自动导致弹出窗口被解除。您的视图和视图控制器代码必须明确处理弹出窗口中的动作和事件,并根据需要调用dismissPopoverAnimated:方法。

+0

Yay!这是解决方案。我将第一个和第二个按钮视图的数组作为alloc初始化后popover的passThroughViews。然后,我在每次按下按钮时以及当用户从弹出窗口中的菜单中选择sthg时都将其解除。 Thx sergio! – aslisabanci 2011-06-11 10:02:54