closuresPopover并打开一个新的一个水龙头

苹果的“移动人机界面指南”中提到了Popovers:

如果可能的话,让人们closures一个popover并打开一个新的一个水龙头。 当几个不同的button每个都打开一个popup窗口时,这种行为是特别需要的,因为它可以防止人们不得不进行额外的敲击。

我现在唯一能想到的解决方法是在解散popup框时跟踪触摸的位置,并检查是否是另一个button的位置。 有没有更简单的方法来做到这一点?

PS:我在stackoverflow中search并search了一段时间才发布。 对不起,如果这是之前在这里问。

UPDATE

我想我没有解释得很清楚。 假设我有三个button。 他们都打开popover。 我的用户点击button#1,popup窗口打开。 当popup窗口打开时,用户点击button#2。 popover被解雇(因为用户在popover之外轻敲 – 非模式popovers的默认行为),并且由于用户已经点击了button#2,所以新的popover被打开。 所有这一切,无需两次敲打:一次解散stream行和两次打开新的。

第二次更新

我build立了一个简单的虚拟来重现我正在做的事情。 当用户点击button并且popup窗口打开时,打开popup窗口的方法不会被调用。 因此用户必须点击两次以打开第二个popup窗口。 有任何想法吗?

#import "RootViewController.h" #import "AViewController.h" @interface RootViewController() @property (nonatomic, retain) UIPopoverController *currentPopover; @end @implementation RootViewController @synthesize currentPopover; - (void)loadView { CGRect applicationFrame = [[UIScreen mainScreen] applicationFrame]; UIView *view = [[UIView alloc] initWithFrame:applicationFrame]; CGRect buttonFrame = CGRectMake(50, 100, 200, 40); for (int i = 0; i < 3; i++) { UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; [button setTitle:[NSString stringWithFormat:@"Button %i", i + 1] forState:UIControlStateNormal]; [button addTarget:self action:@selector(openPopover:) forControlEvents:UIControlEventTouchDown]; [button setFrame:buttonFrame]; [view addSubview:button]; buttonFrame.origin.y += 50; } self.view = view; [view release]; } - (IBAction)openPopover:(id)sender { AViewController *avc = [[AViewController alloc] init]; UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:avc]; [avc release]; UIPopoverController *tempPopover = [[UIPopoverController alloc] initWithContentViewController:navigationController]; [tempPopover setDelegate:self]; [tempPopover setPopoverContentSize:CGSizeMake(320, 500)]; [tempPopover presentPopoverFromRect:[sender frame] inView:[self view] permittedArrowDirections:UIPopoverArrowDirectionLeft animated:YES]; self.currentPopover = tempPopover; [tempPopover release]; [navigationController release]; } - (void)dealloc { [currentPopover release]; [super dealloc]; } @end 

如果在工具栏中使用条形button项目,则当您点击另一个条形button项目时,打开的popup式窗口不会自动closures。 在这些情况下,您应该closures可见的popup窗口,并一步打开另一个窗口。

 - (IBAction)sortAction { [searchBarView resignFirstResponder]; [self.popoverController dismissPopoverAnimated:YES]; //clear popover self.popoverController = popoverSetting; [self.popoverController presentPopoverFromBarButtonItem:sortBarButtonItem permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; //show popover } 

希望能帮助你

比方说你有3个button,每个打开一个popup。 您可以使用状态variables来跟踪popup窗口当前是否处于打开状态,并在每个“打开popup窗口”方法中,在打开新popup窗口之前closures现有窗口(如果打开)。