objective-c - nodos - punto de ancla illustrator
¿Hay alguna forma de seleccionar un ancla segue programáticamente? (4)
Tuve el mismo problema cuando estaba creando un BarButtonItem programáticamente. También puede evitarlo creando un botón invisible, deshabilitado, que puede establecer como anclaje en IB.
Supongamos que tengo un Storyboard que contiene una vista que contiene un botón. Cuando el usuario presiona este botón, aparece un popover.
Por lo tanto, necesito establecer un ancla arrastrando el segue al botón usando Xcode (y luego realizoSegueWithIdentifier:) .
Entonces, mi pregunta es: ¿hay alguna manera de establecer este "anclaje" programáticamente?
Gracias.
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 resolverlo.
Crea una vista pequeña en el guión gráfico (el tamaño no importa), hazlo invisible y vincúlalo. En mi caso, esto se llama invisibleViewAsArchor
Conecte el elemento del botón UIBar 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 puede ver antes de mostrar el popover (con performSegueWithIdentifier), estoy cambiando el marco del Archor con los valores del botón que ha disparado el evento.
Espero eso ayude.
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 control 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 su lugar
dest.popoverPresentationController?.barButtonItem = nil
dest.popoverPresentationController?.sourceView = <your view here>
No puede crear programáticamente segue tal como se explica aquí: la creación de un segue programáticamente , sin embargo, puede configurar qué controlador de destino desea mostrar en tiempo de ejecución. Esto se explica en la documentación de la manzana aquí: Configuración del controlador de destino cuando se activa un Segue .
¡Espero que esto ayude!