Pergunta

As "Diretrizes de interface humana móvel" da Apple dizem sobre Popovers:

Quando possível, permita que as pessoas fechem um popover e abram um novo com um toque. Este comportamento é especialmente desejável quando vários botões de barra diferentes abrem um popover, porque evita que as pessoas de ter que fazer toques extras.

A única solução que posso pensar agora é rastrear a posição do toque ao dispensar o popover e verificar se essa era a posição de outro botão. Existe alguma maneira mais fácil de fazer isso?

PS: Eu pesquisei no stackoverflow e pesquisei um pouco antes de postar. Desculpe, se isso foi perguntado aqui antes.

< PaulUPDATE

Acho que não me expliquei bem. Digamos que tenho três botões. Todos eles abrem um popover. Meu usuário toca no botão 1 e um popover é aberto. Enquanto o popover está aberto, o usuário toca no botão # 2. O popover é descartado (porque o usuário tocou fora do popover - comportamento padrão dos popovers não modais) e um novo popover é aberto porque o usuário clicou no botão # 2. Tudo isso sem ter que tocar duas vezes: uma para dispensar o popover e duas vezes para abrir o novo.

2ª ATUALIZAÇÃO

Construí um manequim simples para reproduzir o que estou tentando fazer. Quando o usuário toca em um botão e um popover é aberto, o método que abre os popovers não é chamado. Portanto, o usuário deve clicar duas vezes para abrir o segundo popover. Alguma ideia?

#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
Foi útil?

Solução

Se você usar itens do botão da barra em uma barra de ferramentas, o popover aberto não é fechado automaticamente quando você toca em outro item do botão da barra.Nessas situações, você deve fechar o popover visível e abrir o outro em uma etapa.

Outras dicas

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

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

espero que ajude você

Digamos que você tenha 3 botões e cada um abre um pop-up.Você pode usar uma variável de estado que rastreia se um pop-up está aberto no momento e, dentro de cada método de "pop-up aberto", feche o existente (se estiver aberto) antes de abrir o novo pop-up.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top