Pregunta

Las "Directrices de interfaz humana móvil de Apple" dice sobre Popovers:

Cuando sea posible, permita que las personas cierren un Popover y abra uno nuevo con un toque. Este comportamiento es especialmente deseable cuando varios botones de barras diferentes abren cada uno de los pobres, porque evita que las personas tengan que hacer grifos adicionales.

La única solución que puedo pensar en este momento es rastrear la posición del tacto al descartar el Popover y verificar si esa era la posición de otro botón. ¿Hay alguna forma más fácil de hacer esto?

PD: Busqué en Stackoverflow y busqué en Google bastante antes de publicar. Lo siento, si esto se preguntó aquí antes.

ACTUALIZAR

Supongo que no me expliqué bien. Digamos que tengo tres botones. Todos abren un Popover. El botón de mi usuario TAPS #1 y un popover se abre. Mientras el Popover está abierto, el botón User Taps #2. El Popover se descarta (porque el usuario aprovechó el comportamiento POPOVER, predeterminado de Popovers no modal) y se abre un nuevo Popover porque el usuario había hecho clic en el botón #2. Todo eso sin tener que tocar dos veces: una vez para descartar al Popover y dos veces por abrir el nuevo.

2da actualización

Construí un muñeco simple para reproducir lo que estoy tratando de hacer. Cuando el usuario aprovecha un botón y un popover está abierto, no se llama el método que abre el popovers. Por lo tanto, el usuario tiene que hacer clic dos veces para abrir el segundo Popover. ¿Algunas ideas?

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

Solución

Si usa elementos del botón de barra en una barra de herramientas, el Popover abierto es no cerrado automáticamente cuando toca otro elemento del botón de barra. En estas situaciones, debe cerrar el Popover visible y abrir el otro en un solo paso.

Otros consejos

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

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

la esperanza te ayudará

Digamos que tiene 3 botones y cada uno abre una ventana emergente. Puede usar una variable de estado que rastree si una ventana emergente está actualmente abierta, y dentro de cada método "abierto emergente", cierre el existente (si está abierto) antes de abrir la nueva ventana emergente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top