关闭Popover并点击一下即可打开新的

时间:2011-09-12 15:47:00

标签: ios ipad uipopovercontroller uipopover

Apple的“移动人机接口指南”谈到了Popovers:

  

如果可能,允许人们关闭一个弹出窗口并打开一个新弹出窗口   只需点按一下即可。这种行为在多个时尤为理想   不同的酒吧按钮每个都打开一个popover,因为它可以阻止人们   从必须额外的水龙头。

我现在能想到的唯一解决方案是在解除弹出窗口时跟踪触摸的位置并检查是否是另一个按钮的位置。 有没有更简单的方法呢?

PS:我在发布之前在stackoverflow中搜索并搜索了一段时间。对不起,如果之前有人问过这个问题。

更新

我想我没有很好地解释自己。假设我有三个按钮。所有人都打开了一个弹出窗口。我的用户点击按钮#1并打开一个弹出窗口。当弹出窗口打开时,用户点击按钮#2。 popover被解雇(因为用户点击了popover之外 - 非模态弹出窗口的默认行为)并且因为用户点击了按钮#2而打开了新的弹出窗口。所有这一切都无需点击两次:一次解除弹出窗口,两次打开新弹出窗口。

第二次更新

我建造了一个简单的假人来重现我正在尝试做的事情。当用户点击按钮并打开弹出窗口时,不会调用打开弹出窗口的方法。因此,用户必须单击两次才能打开第二个弹出窗口。有什么想法吗?

#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

3 个答案:

答案 0 :(得分:2)

如果您在工具栏中使用条形按钮项,则当您点按另一个条形按钮项时,打开的弹出窗口会自动关闭。在这些情况下,您应该关闭可见的弹出框并一步打开另一个。

答案 1 :(得分:1)

- (IBAction)sortAction {
[searchBarView resignFirstResponder];
[self.popoverController dismissPopoverAnimated:YES]; //clear popover

self.popoverController = popoverSetting;
[self.popoverController presentPopoverFromBarButtonItem:sortBarButtonItem
                               permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; //show popover
}

希望能帮到你

答案 2 :(得分:0)

假设您有3个按钮,每个按钮都会打开一个弹出窗口。您可以使用状态变量来跟踪弹出窗口当前是否已打开,并在每个“打开弹出窗口”方法中,在打开新弹出窗口之前关闭现有窗口(如果已打开)。