2010-12-08 13 views
5

Estoy usando UIBarButtonItem. En mi escenario, quiero mostrar un popover desde cada botón de barra cuando hago doble clic en ese botón de barra. Así que uso una UITapGesture de ese UIBarButtonItem. Pero, la flecha de popover siempre aparece en el medio de todo UIBarButtonItem.Establecer la dirección de la flecha de UIPopover y colocarla manualmente

No puedo hacer que la flecha aparezca en el medio de cada botón de la barra. Mi amigo me decía que fijara la dirección de la flecha usando el punto, pero no sé cómo hacer eso.

¿Cómo puedo establecer tanto la posición como la dirección de la flecha del popover?

+0

de owhh..thank ... i nunca se dan cuenta que antes :) –

Respuesta

8

establecer la dirección para el popover usando:

[yourPopover setPopoverArrowDirection: UIPopoverArrowDirectionDown]; 

También puede utilizar UIPopoverArrowDirectionUp, UIPopoverArrowDirectionLeft y UIPopoverArrowDirectionRight y UIPopoverArrowDirectionAny.

+0

lo que sé de esa dirección, pero quiero decir que quiero cambiar la posición de la dirección .. Yo uso UIPopoverArrowDirectionUp, pero quiero que la posición de la flecha esté en X = 50 yy = 100, ¿puedo hacer eso? –

+0

Realmente me obsesioné con esto hace unos meses ... Desafortunadamente, no se puede especificar la posición de la flecha, solo el rectángulo que presenta el uiipopover. –

+0

owh..gracias a ti ... –

0

Si está utilizando un método IBAction, puede usar (id)sender como su parámetro. (es decir, el botón de llamada) Luego puede establecer el rectángulo de adjuntos del popover en el marco del botón. La flecha hará todo lo posible para unirse al costado de este marco en un lugar apropiado. Ver UIPopoverController Class Reference.

-(IBAction)sortButtonPressed:(id)sender { 
    // Set up your popover class, this varies per your implementation 
    MyPopoverClass *iPop = [[MyPopoverClass alloc] initWithNibName:@"MyPopover" bundle:nil]; 
    UIPopoverController *popover = [[UIPopoverController alloc] initWithContentViewController:iPop]; 

    // Grab the button info from the input parameter 
    UIButton *button = (UIButton *)sender; 
    CGRect buttonRectangle = button.frame; 

    // Set the arrow direction 
    UIPopoverDirection dir = UIPopoverArrowDirectionAny; // Or Up, Down, etc. 

    // Put it all together 
    [popover presentPopoverFromRect:buttonRectangle inView:mySubView permittedArrowDirections:dir animated:YES]; 

    [popover release] 
    [iPop release]; 
} 

También puede codificar ese CGRect a mano si es necesario. Reducir el ancho/alto del rectángulo le permitirá controlar más estrictamente la posición de la flecha.

12

Yo uso el método allowedArrowDirections = .Down, Es trabajo para mí. Ejemplo de Swift:

if let popoverPresentationController = shareViewController.popoverPresentationController { 
    popoverPresentationController.permittedArrowDirections = .Down 
    popoverPresentationController.delegate = self 
    popoverPresentationController.sourceView = sender as! UIButton 
    popoverPresentationController.sourceRect = CGRectMake(0, 0, sender.frame.size.width, sender.frame.size.height) 
} 
+0

perfecto, gracias! – Cmag

+2

puede usar 'popController.popoverPresentationController? .sourceView = sender as? UIView; popController.popoverPresentationController? .sourceRect = sender.bounds' – Cmag

0

Puede establecer la dirección de la flecha en el inspector de atributos de Storyboard Segue. Por ejemplo, me puse la dirección de la flecha para abajo sólo en la siguiente captura de pantalla: enter image description here

Cuestiones relacionadas