ios - Añadir subvista desde un xib u otra escena con guión gráfico
load xib swift 4 (2)
Soy nuevo en iOS y Xcode. No puedo averiguar cómo diseñar una vista separada y hacer que se agregue al controlador UIView principal mediante el guión gráfico.
Hice diferentes enfoques ..
- Solo toma un objeto UI desde la ventana de la esquina inferior derecha del código x, y luego colócalo en cualquier área de espacio del guión gráfico. Pero no puedo dejar caer el objeto UI como con xib.
- Añadir un nuevo UIViewController. Añadir una vista en el
UIViewController
. En el ViewController.m principal, obtengo la nueva instancia deUIViewController
en viewDidLoad, y luego[self.view addSubview:newUIViewController.view]
. Pero no puedo ver la vista agregada. - He creado un nuevo archivo xib. Y añadir una vista en ella. También trato de obtener la instancia en el
ViewController
principal. YaddSubview
con la vista del xib. Pero también falló.
¿Hay una forma correcta o alguna solución de trabajo para hacerlo?
Descubrí una manera de hacerlo. Descrito de la siguiente manera:
- Crea un archivo .xib. Por ejemplo: MyView.xib
- Crear una clase de objetivo-c. Por ejemplo: MyViewClass.h y MyViewClass.m
- Establecer el propietario del archivo .xib a la clase.
- Agregue un elemento UIView en el guión gráfico y establezca la clase personalizada al nombre de la clase object-c (MyViewClass).
El punto clave es anular el método initWithCoder en la clase object-c.
- (id)initWithCoder:(NSCoder *)aDecoder { if ((self = [super initWithCoder:aDecoder])) { [self addSubview:[[[NSBundle mainBundle] loadNibNamed:@"MyView" owner:self options:nil] objectAtIndex:0]]; } return self; }
La idea es que la clase personalizada se cargue en el guión gráfico y se llamará a initWithCode. El índice 0 es la vista raíz en el constructor de interfaces .xib.
Es un poco complicado pero funciona.
En el guión gráfico, arrastre y suelte un controlador de vista. El controlador de vista viene con una vista principal. Seleccione esa vista principal haciendo clic fuera del controlador de vista agregado y luego haciendo clic en el centro de la misma. Ahora, simplemente arrastre una vista en pantalla o lo que sea a esa vista principal tal como lo hizo con IB.