Generador de interfaz. ¿Cómo puedo reemplazar los controladores de vista programáticos con los controladores de vista IB?

StackOverflow https://stackoverflow.com/questions/1601835

Pregunta

A medida que muevo más y más de mi construcción de interfaz de usuario de XCode a IB, hay un obstáculo restante que debo despejar.

Actualmente, creo mis controladores de vista personalizados en XCode con inicializadores personalizados. Por lo general, tienen un conjunto de ivars que se configuran durante la inicialización a través de parámetros pasados. Realmente me gustaría mover todo lo que pueda a IB.

¿Podría alguien explicarme cuidadosamente, o, mejor, indicarme cómo codificar, cómo replicar el enfoque XCode de pasar parámetros a través de un inicializador personalizado en IB? probablemente a través de IBOutlet.

Gracias de antemano.

Saludos, Doug

ACTUALIZACIÓN:

Un escenario típico es que mi AppDelegate saldrá a la red, tomará algunos datos - NSMutableData, y luego pasará una referencia a un viewController raíz (generalmente un TableViewController) que se coloca en la pila viewController de un NavigationController.

Cuando se selecciona una celda, se asigna / inicia un secondViewController y se le pasa un subconjunto de los datos. El secondViewController va a la red para obtener un poco más de datos, crea una jerarquía de vistas, entrega bits de los datos recuperados a cada subvista y luego se envía un mensaje con setNeedsDisplay para procesar los datos.

Es este paso jerárquico de datos lo que quiero transferir a IB es posible.

¿Fue útil?

Solución

Todavía puede tener un inicializador personalizado. Sin embargo, dentro de este inicializado, llamará - [initWithNibName: @ " suNibName " paquete: paquete] . Conectará sus variables de instancia relacionadas con UIKit ( UILabel , UIButton , etc.) en el Constructor de interfaces y, por lo tanto, no tendrá que crear una instancia de esos objetos en tu inicializador Otras variables de instancia (cadenas, diccionarios, objetos personalizados, etc.) creará una instancia y la configurará en su inicializador.

Además, tenga en cuenta que la manipulación de las variables relacionadas con UIKit , como la configuración del texto de la etiqueta o la posición de un UIView , debe realizarse en el viewDidLoad ya que estos objetos pueden no haberse creado completamente en el momento en que se ejecuta el inicializador.

Avísame si necesitas más información.

Otros consejos

Digamos que tenemos MyViewController que extiende UIViewController y MyViewControllerParameter, que es uno de nuestros objetos personalizados que pasamos a MyViewController en la inicialización. MyViewController tiene un IBOutlets de tipo MyViewControllerParameter definido en él. Queremos poner MyViewController en otra vista que contiene, ParentView.xib. ParentView.xib es propiedad de ParentViewController.m y se crea en otro lugar. Hacemos doble clic en ParentView.xib en XCode para iniciar Interface Builder. Luego arrastramos un " objeto " desde la vista de la biblioteca (creo que abre la vista de la biblioteca con Cmd + Shift + L si no está abierta de forma predeterminada) en la ventana del documento. (Esta es la ventana activada por Cmd + 0).

Un " Objeto " es un widget arbitrario que se encuentra en la biblioteca (identificado por un icono de cubo de oro sólido) que puede representar cualquier cosa en su proyecto. Después de colocar el nuevo objeto en la ventana del documento, escribimos Cmd + 4 para abrir la ventana del Inspector de identidad. En el campo de texto superior podemos escribir el nombre de nuestro parámetro de controlador de vista, " MyViewControllerParameter " ;. A continuación, encontramos el widget ViewController en la biblioteca y lo colocamos en la ventana del documento. Abrimos el inspector de atributos (Cmd + 1) y configuramos el nombre de la punta en " MyView.xib " Esto debería hacer que CocoaTouch cargue MyViewController utilizando las definiciones en " MyView.xib " ;.

Abra el inspector de identidad y establezca el atributo de clase en MyViewController. Por último, haga clic con el botón derecho o haga clic con el botón secundario (o con dos dedos si configuramos correctamente el trackpad en nuestro MacbookPro) MyViewController en la ventana del documento. Se abrirá una ventana que muestra todos los IBOutlets en MyViewController. Arrastre una línea desde el pequeño círculo abierto al lado de la salida MyViewControllerParameter y suéltela en el objeto MyViewControllerParameter que se encuentra en la ventana del documento. Conectar estos puntos es la forma en que establece los parámetros entre los objetos usando el generador de interfaces.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top