from objective-c ios xib addsubview

objective c - from - Agregar una subvista personalizada(creada en un xib) a la vista de un controlador de vista: ¿Qué estoy haciendo mal?



load view from xib swift 4 (3)

Como dijo Hocker, tienes que usar ese método para pasar el nombre XIB (sin la extensión).

Entonces tienes que controlar esta lista:

  • Abra el archivo .xib en IB
  • Haga clic en Propietario de archivo y seleccione la clase correcta (MyCustomView en su caso)
  • Mantenga presionado el control y arrastre desde el propietario del archivo a la vista (ahora la salida de la vista está bien)

Espero que funcione. Aclamaciones.

Creé una vista en un xib (con un indicador de actividad, una vista de progreso y una etiqueta). Luego creé archivos .h / .m:

#import <UIKit/UIKit.h> @interface MyCustomView : UIView { IBOutlet UIActivityIndicatorView *actIndicator; IBOutlet UIProgressView *progressBar; IBOutlet UILabel *statusMsg; } @end #import "MyCustomView.h" @implementation MyCustomView - (id)initWithFrame:(CGRect)frame { if ((self = [super initWithFrame:frame])) { // Initialization code } return self; } - (void)dealloc { [super dealloc]; } @end

En IB, establezco el propietario del archivo y veo la identidad en MyCustomView y conecto el IBOutlet al propietario del archivo

En MyViewController.m, he:

- (void)viewDidLoad { [super viewDidLoad]; UIView *subView = [[MyCustomView alloc] initWithFrame:myTableView.frame]; [subView setBackgroundColor:[UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.5]]; [myTableView addSubview:subView]; [subView release]; }

Cuando ejecuto la aplicación, la vista se agrega, pero no puedo ver la etiqueta, la barra de progreso y el indicador de actividad.

¿Qué estoy haciendo mal?


Creo que necesitas usar este método:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil;

Esto se debe a que necesita pasar el nombre de archivo .xib en "nibNameOrNil".


-loadNibNamed cargarlo utilizando el método -loadNibNamed . -initWithNibName es solo para UIViewControllers.

Agregue el siguiente código a su método de inicio MyCustomView:

NSArray *subviewArray = [[NSBundle mainBundle] loadNibNamed:@"MyCustomView" owner:self options:nil]; UIView *mainView = [subviewArray objectAtIndex:0]; [self addSubview:mainView];

Recuerde, si está inicializando un objeto desde una punta, llama a - (id)initWithCoder:(NSCoder *)aDecoder para inicializar, por lo que tendrá que anularlo si está creando el objeto MyCustomView dentro de la punta. Si solo lo hace con initWithFrame: simplemente anule eso y agregue el código anterior. Además, en su plumilla, asegúrese de tener un UIView de nivel superior y coloque todos los demás elementos (eso asegura que su matriz subview tenga solo una entrada).

Esto cargará las vistas desde el plumín y las agregará al objeto, y debería hacer el truco.