En pantallas complejas (Controladores de vista), solía separar todo en partes más pequeñas (las llamo widgets). Estos widgets consisten básicamente en MyWidget.h
un MyWidget.m
archivo y un MyWidget.xib
archivo, donde el elemento raíz es un UIView
y la clase MyWidget es el propietario del archivo de UIView. En el inicio de este widget hago un loadNibNamed
.
En mi View Controller, luego hago una [[MyWidget alloc] init]
, que agrego a la vista principal del View's Controller como una subvista. Esto, hasta ahora, funciona perfectamente.
Ahora me pregunto cómo hacer lo mismo con el guión gráfico, porque realmente no puedo comenzar a arrastrar un UIView
lugar, siempre tengo que comenzar con un UIViewController
, lo cual no quiero.
Si no hay forma posible de hacer esto con un Storyboard, ¿puedo simplemente hacerlo de la manera anterior, usando el Storyboard para mis pantallas principales y segues, y usar un archivo .xib separado para definir vistas personalizadas?
fuente
xib
mensajes de correo electrónico para sus controladores de vista por separado y no en el guión gráfico?Respuestas:
Poner el widget / vista en un archivo .xib separado funciona y es apropiado especialmente si desea hacer referencia a esa misma vista desde múltiples controladores de vista.
Sin embargo, a veces desea ver la vista / widget adicional dentro del mismo guión gráfico, y es posible. Así es como lo haces:
Seleccione su controlador de vista en IB (haga clic en la barra negra debajo de la vista), luego arrastre una UIView desde la Biblioteca de objetos a la barra negra:
Cuando una vista está en la barra negra, se crea una instancia como cualquier otra vista en IB, pero simplemente no se agrega a su jerarquía de vista hasta que lo hace en código. Cambie la clase de la vista para que coincida con su propia subclase si es necesario:
Puede conectarlo a su controlador de vista como lo haría con cualquier otra vista:
La vista agregada aparece en el esquema de su documento y también puede conectar acciones y referencias allí:
Ahora, el problema que permanece es que en realidad no puede ver la vista sin importar cuántas veces intente hacer clic o hacer doble clic, lo que frustraría todo el propósito de ponerlo en el mismo guión gráfico. Afortunadamente, hay dos soluciones que conozco.
La primera solución es arrastrar la vista desde la barra negra a la vista del controlador de vista, editarla y luego volver a arrastrarla a la barra negra una vez que haya terminado. Esto es problemático pero confiable.
La otra solución es más delicada, pero la prefiero porque me permite ver todas mis vistas al mismo tiempo:
Arrastre un UITableView desde la biblioteca de objetos a su vista recién agregada.
Luego, arrastre un UITableViewCell a ese UITableView.
Una vez que lo hace, su vista aparece mágicamente a un lado, pero tiene un UITableView que no desea. Puede cambiar el tamaño a 0x0, o puede eliminarlo y su UIView (generalmente) seguirá siendo visible.
Ocasionalmente, la vista secundaria se volverá a ocultar en IB. Puede repetir los pasos anteriores si eliminó UITableView, o si UITableView todavía está en la jerarquía, solo necesita hacer clic en UITableViewCell y la vista aparecerá nuevamente.
El segundo método funciona para UIViews pero no tan bien para UIToolbars y es imposible para UIButtons, por lo que la solución más limpia que he encontrado cuando necesita incluir muchas subvistas diferentes es adjuntar una única UIView secundaria a su controlador de vista como un contenedor que nunca se muestra, coloque todas sus vistas secundarias allí y use el truco UITableViewCell para hacer que todo sea visible. Cambio el tamaño de mi UITableView ficticio a 0x0 para hacerlo invisible. Aquí hay una captura de pantalla de cómo se ve todo junto:
fuente
Si solo está buscando hacer que sus controladores de vista estén en otro lugar (y no en su guión gráfico), entonces hay una manera bastante simple de lograr esto:
1) Cree sus
CustomViewController
s (abcdController
en el código que probé) con susxib
s individuales como de costumbre.2) Agregue
UIViewController
(o lo que sea su superclaseCustomViewController
) al guión gráfico.3) Configure CustomClass en
CustomViewController
lugar deUIViewController
como se muestra aquí:4) Finalmente, en su
viewDidLoad
, cargue el archivo personalizadoxib
y listo.fuente
loadNibNamed
en ese caso ... XOCreo que puede hacer algo como esto para obtener una instancia de un controlador de vista específico de Storyboard y usar la vista encima.
Espero que esto ayude
Gracias Vijay
fuente