with from custom iphone xcode uiview nib

iphone - from - Al cargar UIView desde xib, se bloquea al intentar acceder a IBOutlet



load xib swift 4 (1)

Has reasignado la clase de tu vista personalizada a la vista que vivía en tu xib. No necesitas hacer eso porque entonces lo que obtuviste fue la vista desde el xib y acabas de filtrar tu CoverPanel. Entonces, simplemente reemplace su inicializador:

- (id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { // No need to re-assign self here... owner:self is all you need to get // your outlet wired up... UIView* xibView = [[[NSBundle mainBundle] loadNibNamed:@"CoverPanel" owner:self options:nil] objectAtIndex:0]; // now add the view to ourselves... [xibView setFrame:[self bounds]]; [self addSubview:xibView]; // we automatically retain this with -addSubview: } return self; }

Tengo un archivo xib con una pequeña UIView , que a su vez contiene algunas etiquetas. Ahora, estoy tratando de cargar ese UIView en un UIViewController existente, y cambiar uno de los textos de las etiquetas. La razón por la que quiero hacerlo de esta manera es que el UIView será reutilizado con diferentes textos de etiquetas, así que pensé que hacer una clase personalizada y cargarlo desde un xib sería la mejor manera de hacerlo.

He intentado varias formas de cargarlo y lo he mostrado con éxito en mi viewcontroller. El problema es que, una vez que trato de vincular realmente un IBOutlet en Interface Builder y acceder a él, mi aplicación se cuelga.

UIView clase UIView personalizada, que se ve así:

CoverPanel.h

@interface CoverPanel : UIView { IBOutlet UILabel *headline; } @property (nonatomic, retain) IBOutlet UILabel *headline; @end

CoverPanel.m

@implementation CoverPanel @synthesize headline; - (id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { // Initialization code. // self = [[[NSBundle mainBundle] loadNibNamed:@"CoverPanel" owner:self options:nil] objectAtIndex:0]; } return self; }

En CoverPanel.xib , he vinculado el UILabel a la salida del título. En mi viewcontroller, así es como creo la instancia de CoverPanel , y aquí es donde falla:

CoverPanel *panelView = [[CoverPanel alloc] initWithFrame:CGRectMake(0,0,300,100)];

Hasta aquí todo bien. Muestra UIView exactamente como se muestra en .xib. Pero tan pronto como trato de cambiar el headline.text manera:

panelView.headline.text = @"Test";

se bloquea con este error: aplicación de finalización debido a una excepción no detectada ''NSInvalidArgumentException'', razón: ''- [título de UIView]: selector no reconocido enviado a la instancia 0x5c22b00''

Puede que sea algo muy pequeño que estoy pasando por alto, pero hasta ahora me ha estado volviendo loco por horas y horas. ¿Alguien tiene alguna idea?