2012-02-26 683 views
12

Supongamos que tengo un Guión gráfico que contiene una vista que contiene un botón. Cuando el usuario presiona este botón, aparece un popover.¿Hay alguna forma de seleccionar un ancla segue programáticamente?

Por lo tanto, tengo que establecer un ancla arrastrando el segue al botón con Xcode (y luego hacer performSegueWithIdentifier:).

Entonces, mi pregunta es: ¿hay alguna manera de establecer este "anclaje" programáticamente?

Gracias.

Respuesta

14

En mi caso, he agregado programáticamente varios UIBarButtonItem. El problema de usar solo una vista invisible como un archor es que, si como en mi caso, el tamaño del UIBarButtonItem está cambiando su tamaño, la flecha del popover no aparece centrada, y aunque funciona, se ve un poco extraño.

Cómo solucionarlo.

Crea una pequeña vista en el guión gráfico (el tamaño no importa), hazlo invisible y vincúlalo. En mi caso, esto se denomina invisibleViewAsArchor

Conecte el elemento UIBarbutton con la siguiente acción.

-(IBAction) showMyPopover:(id)sender { 
    if([self.popoverController isPopoverVisible]) 
    {  
     [self.popoverController dismissPopoverAnimated:YES]; 
    }else{ 
     self.invisibleViewAsArchor.frame = CGRectMake([sender view].frame.origin.x, 
                  [sender view].frame.origin.y-50, 
                  [sender view].frame.size.width, 
                  [sender view].frame.size.height); 

     [self performSegueWithIdentifier:@"segue_to_something" sender:self]; 
    } 
} 

como se puede ver antes de que aparezca el popover (con performSegueWithIdentifier), voy a cambiar el marco de la archor con los valores de la tecla que se ha disparado el evento.

Espero que ayude.

+0

Hola @GUiLTY, así que estoy teniendo el mismo problema . ¿Me preguntaba si el "invisibleViewAsArchor" es una clase que necesito hacer para esa vista? – gdubs

+0

Hola @gdubs "invisibleViewAsAnchor" es una vista estándar y el interior - (void) {viewDidLoad \t // después de su código ... \t self.invisibleViewAsArchor.hidden = TRUE; } – MiQUEL

+2

Optimización pequeña (pequeña): no necesita el "retorno" allí :) – narco

1

Tuve el mismo problema cuando creaba un BarButtonItem mediante programación. También puede evitarlo creando un botón invisible, deshabilitado, que puede establecer como anclaje en IB.

1

En el guión gráfico, ancla el popover a algún botón arbitrario. No se preocupe demasiado por cuál será anulado en el código.

En el método de controlador de vista prepareForSegue, agregue el código:

let dest = segue.destinationViewController 
dest.popoverPresentationController?.barButtonItem = <your bar button here> 

o si desea anclar a una vista en lugar

dest.popoverPresentationController?.barButtonItem = nil 
dest.popoverPresentationController?.sourceView = <your view here> 
Cuestiones relacionadas