Domanda

Le "Linee guida per l'interfaccia umana mobile" di Apple dicono sui popover:

Quando possibile, consenti alle persone di chiudere un popover e aprirne uno nuovo con un tocco. Questo comportamento è particolarmente desiderabile quando sono presenti più pulsanti di barra diversi aprono ciascuno un popover, perché impedisce alle persone dal dover fare tap in più.

L'unica soluzione che posso pensare in questo momento è tenere traccia della posizione del tocco quando si chiude il popover e verificare se quella era la posizione di un altro pulsante. Esiste un modo più semplice per farlo?

PS: ho cercato in stackoverflow e ho cercato su Google un po 'prima di postare. Spiacenti, se questo è stato chiesto qui prima.

<⇨UPDATE

Immagino di non essermi spiegato bene. Diciamo che ho tre pulsanti. Tutti aprono un popover. Il mio utente tocca il pulsante n. 1 e si apre un popover. Mentre il popover è aperto, l'utente tocca il pulsante n. 2. Il popover viene ignorato (perché l'utente ha toccato al di fuori del popover - comportamento predefinito dei popover non modali) e si apre un nuovo popover perché l'utente ha fatto clic sul pulsante n. 2. Tutto questo senza dover toccare due volte: una per chiudere il popover e due volte per aprire quello nuovo.

2 ° AGGIORNAMENTO

Ho creato un semplice manichino per riprodurre ciò che sto cercando di fare. Quando l'utente tocca un pulsante e un popover è aperto, il metodo che apre i popover non viene chiamato. Pertanto l'utente deve fare clic due volte per aprire il secondo popover. Qualche idea?

#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
È stato utile?

Soluzione

Se utilizzi gli elementi del pulsante della barra in una barra degli strumenti, il popover aperto non si chiude automaticamente quando tocchi un altro elemento del pulsante della barra.In queste situazioni dovresti chiudere il popover visibile e aprire l'altro in un unico passaggio.

Altri suggerimenti

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

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

la speranza ti aiuterà

Supponiamo che tu abbia 3 pulsanti e ognuno apra un popup.È possibile utilizzare una variabile di stato che tiene traccia se un popup è attualmente aperto e, all'interno di ogni metodo "open popup", chiudere quello esistente (se è aperto) prima di aprire il nuovo popup.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top