¿Qué es un StoryBoard ID y cómo puedo usarlo?

110

Soy nuevo en el desarrollo de IOS y recientemente comencé en Xcode 4.5. Vi para cada viewController que podía establecer algunas variables de identidad, incluida la ID del guión gráfico. ¿Qué es esto y cómo puedo usarlo?

ingrese la descripción de la imagen aquí

Comencé a buscar en stackoverflow y no pude encontrar ninguna explicación. Asumí que no es solo una etiqueta estúpida que puedo configurar para recordar mi controlador, ¿verdad? ¿Qué hace?

RTB
fuente

Respuestas:

132

El ID del guión gráfico es un campo de cadena que puede usar para crear un nuevo ViewController basado en ese ViewController del guión gráfico. Un ejemplo de uso sería desde cualquier ViewController:

//Maybe make a button that when clicked calls this method

- (IBAction)buttonPressed:(id)sender
{
    MyCustomViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"MyViewController"];

   [self presentViewController:vc animated:YES completion:nil];
}

Esto creará un MyCustomViewController basado en el ViewController del guión gráfico que nombró "MyViewController" y lo presentará sobre su controlador de vista actual

Y si está en el delegado de su aplicación, podría usar

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard"
                                                         bundle: nil];

Editar: Swift

@IBAction func buttonPressed(sender: AnyObject) {
    let vc = storyboard?.instantiateViewControllerWithIdentifier("MyViewController") as MyCustomViewController
    presentViewController(vc, animated: true, completion: nil)
}

Editar para Swift> = 3:

@IBAction func buttonPressed(sender: Any) {
    let vc = storyboard?.instantiateViewController(withIdentifier: "MyViewController") as! ViewController
    present(vc, animated: true, completion: nil)
}

y

let storyboard = UIStoryboard(name: "MainStoryboard", bundle: nil)
Eric
fuente
Probemos eso, y cómo se obtiene elself.storyboard
RTB
Se puede acceder a self.storyboard desde cualquier viewcontroller. Editaré mi respuesta ahora para que pueda ver
Eric
¿Y si es necesario acceder a él desde mi AppDelegate o cualquier otra clase?
RTB
Se agregó otra edición que muestra cómo acceder al guión gráfico desde cualquier archivo.
Eric
1
self.storyboardse puede acceder desde cualquier controlador de vista que se cargó desde un guión gráfico. Si el controlador de vista no se cargó desde un guión gráfico, esa propiedad es nula.
rob mayoff
13

Para agregar a la respuesta de Eric y actualizarla para Xcode 8 y Swift 3:

Una ID de guión gráfico hace exactamente lo que su nombre implica: identifica. Solo que identifica un controlador de vista en un archivo de guión gráfico. Así es como el guión gráfico sabe qué controlador de vista es cuál.

Ahora, no se confunda con el nombre. Una ID de guión gráfico no identifica un 'guión gráfico'. Un guión gráfico, de acuerdo con la documentación de Apple, "representa los controladores de vista para toda o parte de la interfaz de usuario de su aplicación". Entonces, cuando tiene algo como la imagen a continuación, tiene un guión gráfico llamado Main.storyboard que tiene dos controladores de vista, a cada uno de los cuales se le puede dar una ID de guión gráfico (su ID en el guión gráfico).

ingrese la descripción de la imagen aquí

Puede usar la ID del guión gráfico de un controlador de vista para crear una instancia y devolver ese controlador de vista. Luego puedes manipularlo y presentarlo como quieras. Para usar el ejemplo de Eric, digamos que desea presentar un controlador de vista con el identificador 'MyViewController' cuando se presiona un botón, lo haría de esta manera:

@IBAction func buttonPressed(sender: Any) {
    // Here is where we create an instance of our view controller. instantiateViewController(withIdentifier:) will create an instance of the view controller every time it is called. That means you could create another instance when another button is pressed, for example.
    let vc = storyboard?.instantiateViewController(withIdentifier: "MyViewController") as! ViewController
    present(vc, animated: true, completion: nil)
}

Tenga en cuenta los cambios en la sintaxis.

Taiwosam
fuente
El icono de advertencia amarillo indica que se debe al hecho de que el segundo controlador de vista no tiene punto de entrada y / o ID. Esto se puede solucionar dándole una ID de guión gráfico o conectándolo a otro controlador de vista en el guión gráfico. De esa manera, el guión gráfico sabe cómo alcanzarlo e identificarlo.
Taiwosam
No pude encontrar el campo ID de Storyboard, así que gracias por la imagen. Está en la misma posición en Xcode 9.
Isaac Bosca