2011-11-13 23 views
7

Estoy intentando utilizar la nueva función Storyboard, sin embargo, estoy confundido acerca de las Relaciones Storyboard? ¿En qué se diferencian de IBOutlets?Relación Storyboard en iOS

Además, ¿cómo puedo agregar mi propia relación a mi propia subclase UIViewController?

He intentado buscar en la documentación pero no puedo encontrar mucho sobre ellos.

Respuesta

8

La manera en que yo entiendo que es: las relaciones son forma de representar un 'padre-hijo' relación de iOS y mientras que sí parece bastante recursivo, un ejemplo de la relación entre padres e hijos es un contenedor UIViewController contiene un UIViewController.

Esa es la teoría de todos modos: se entiende mejor con el UINavigationController. Se llama 'contenedor' porque contiene tantos UIViewControllers regulares en una metáfora de 'pila' para que pueda hacer sus desgloses y desgloses de UITableView normales.

El punto clave es que la transición entre UINavigationController y el primer UIViewController en su pila, hay una "relación" mientras que la transición entre el resto de los UIViewControllers es solo una transición de inserción normal.

Lo mismo es evidente en el UISplitViewController - necesita dos controladores de vista (a veces llamados controladores de vista de contenido) desde el inicio y estos están conectados entre el padre UISplitViewController (el contenedor) y dos controladores de vista regulares (contenido)

(por lo tanto, las relaciones no son como IBOutlets, sino más bien como segues - son incluso en la categoría 'segues' de los contenedores de controlador de vista estándar)

Ahora - no se nos permite a subclase el controlador de vista estándar contenedores, pero se nos permite crear contenedores de controlador de vista personalizados, pero no puedo definir una relación en mi vista personalizada contenedor del controlador !!!!!!!!!!!

entonces: "¿Puedo usarlos en mis propios controladores?" la respuesta es aún desconocido (al menos para mí, y la documentación es delgado en el mejor)

-1

escribí algunos tutoriales sobre cómo utilizar guiones gráficos más en mi sitio ...

Part 1 of tutorial

Part 2 of tutorial

Tal vez eso le ayudará un poco? En esencia, las relaciones de Segue proporcionan un identificador para el enlace entre dos elementos en su guión gráfico. Puede usar estos identificadores para administrar cómo funcionan las cosas.

+0

Entonces, ¿cómo es eso diferente de un IBOutlet? ¿Y cómo puedo usarlos en mis propios controladores? –

+0

Cuando crea un segue, le permite especificar un identificador. Usas ese identificador para verificar si esa transición se está usando actualmente para la transición de un controlador (o lo que sea) a otro. En realidad, no los usa de ninguna otra manera, por lo que difieren de IBOutlets en ese aspecto. También se usan para identificar cómo impulsar la nueva vista (push/modal/popover, etc.). Los tutoriales que he vinculado muestran cómo usarlos en sus propios controladores. – Simon

+0

Enlaces actualizados al tutorial, recientemente interrumpido después del traslado del sitio. Supongo que este es el motivo de la votación negativa inexplicada/no razonada. – Simon

1

crear una subclase de la UIStoryboardSegue así:

@implementation JTARelationshipSegue 

- (void)perform 
{ 
    return; 
} 

@end 

Hacer un segue costumbre entre los dos objetos y establezca el clase como JTARelationshipSegue. En el controlador de vista hacen que el controlador de vista realice la segue así:

- (void)viewDidLoad 
{ 
    ... 
    [self performSegueWithIdentifier:@"addChild" sender:self]; 
} 

es necesario tener asigna un identificador segues en la interfaz del generador a addChild.

Impement prepareForSegue:sender por lo que se añade el controlador de vista segues destino como un hijo del controlador de vista actual, así:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    UIViewController *destination = [segue destinationViewController]; 
    [self addChildViewController:destination]; 
    ... 
} 

Usted tendrá que tener un identificador segue diferente para cada niño que desea crear (u otra forma de identificar el controlador de vista específico.

Esto hará que el archivo del guión gráfico se vea más bonito y legible, sin embargo, es mejor que cargue sus otros controles de vista y los agregue como secundarios en su vista método de carga:

- (void)viewDidLoad 
{ 
    [self addChildViewController: 
     [[self storyboard] 
      initiateViewControllerWithIdentifier:@"myIdent"]]; 
... 
} 
+0

Eso es bastante inteligente, aunque no parece 100% la forma correcta de usar un segue. No creo que UINavigationController haga esto para exponer la relación rootViewController ... pero quién sabe. – cynistersix

+0

Esto funciona totalmente y ahora estoy conectando conexiones en mi guión gráfico para facilitar la lectura con su método. – cynistersix

Cuestiones relacionadas