Frage

In Apples "Richtlinien für mobile Benutzeroberflächen" heißt es zu Popovers:

Wenn möglich, erlauben Sie Personen, ein Popover zu schließen und ein neues zu öffnen mit einem Fingertipp. Dieses Verhalten ist besonders wünschenswert, wenn mehrere Verschiedene Leistenschaltflächen öffnen jeweils ein Popover, da es Personen verhindert von zusätzlichen Klopfen.

Die einzige Lösung, die ich mir derzeit vorstellen kann, besteht darin, die Position der Berührung beim Schließen des Popovers zu verfolgen und zu überprüfen, ob dies die Position einer anderen Schaltfläche war. Gibt es eine einfachere Möglichkeit, dies zu tun?

PS: Ich habe im Stackoverflow gesucht und vor dem Posten eine ganze Weile gegoogelt. Entschuldigung, wenn dies hier schon einmal gefragt wurde.

UPDATE

Ich glaube, ich habe mich nicht gut erklärt. Angenommen, ich habe drei Tasten. Alle öffnen einen Popover. Mein Benutzer tippt auf die Schaltfläche Nr. 1 und ein Popover wird geöffnet. Während das Popover geöffnet ist, tippt der Benutzer auf die Schaltfläche 2. Das Popover wird geschlossen (weil der Benutzer außerhalb des Popovers getippt hat - Standardverhalten von nicht modalen Popovers) und ein neues Popover wird geöffnet, weil der Benutzer auf Schaltfläche 2 geklickt hat. All dies, ohne zweimal tippen zu müssen: einmal, um das Popover zu schließen, und zweimal, um das neue zu öffnen.

2. UPDATE

Ich habe einen einfachen Dummy gebaut, um zu reproduzieren, was ich versuche zu tun. Wenn der Benutzer auf eine Schaltfläche tippt und ein Popover geöffnet ist, wird die Methode zum Öffnen der Popover nicht aufgerufen. Daher muss der Benutzer zweimal klicken, um das zweite Popover zu öffnen. Irgendwelche Ideen?

#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

War es hilfreich?

Lösung

Wenn Sie Balkenschaltflächenelemente in einer Symbolleiste verwenden, wird das geöffnete Popover nicht automatisch geschlossen, wenn Sie auf ein anderes Balkenschaltflächenelement tippen.In diesen Situationen sollten Sie das sichtbare Popover schließen und das andere in einem Schritt öffnen.

Andere Tipps

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

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

Hoffnung hilft dir

Nehmen wir an, Sie haben 3 Schaltflächen und jede öffnet ein Popup.Sie können eine Statusvariable verwenden, die verfolgt, ob ein Popup gerade geöffnet ist, und in jeder Methode "Popup öffnen" die vorhandene (falls geöffnet) Methode schließen, bevor Sie das neue Popup öffnen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top