titlelabel color buttons ios objective-c cocoa-touch uiview uibutton

ios - color - Un UIButton en mi subvista no funcionará



menu ios (1)

Esta es básicamente la misma respuesta que di aquí: https://stackoverflow.com/a/22188740/341994

El problema es que su InfoAboutBlockView no tiene tamaño. (Nunca le diste un marco, por lo que su marco es cero.) Por lo tanto, no es tangible. Por lo tanto, ninguna de sus subvistas es tangible. El botón es visible y ContentView de contentView puede estar visible, pero están fuera de los límites de InfoAboutBlockView, que es del tamaño de un solo punto. Y una subvista fuera de los límites de su supervista no se puede tocar.

Esto sería más evidente si le dio a InfoAboutBlockView un color de fondo extraño. No verás ese color cuando se carga.

InfoAboutBlockView *infoAboutBlockView = [[InfoAboutBlockView alloc]init2]; [self.view addSubview:infoAboutBlockView]; infoAboutBlockView.backgroundColor = [UIColor redColor]; // you won''t see the red

Otra forma de ver esto sería establecer los clipsToBounds de clipsToBounds en SÍ; en ese caso, no verías el botón.

InfoAboutBlockView *infoAboutBlockView = [[InfoAboutBlockView alloc]init2]; [self.view addSubview:infoAboutBlockView]; infoAboutBlockView.clipsToBounds = YES; // you won''t see the button!

Básicamente esa es toda la causa del problema; le está engañando el hecho de que cuando clipsToBounds es NO, las subvistas fuera de los límites de una vista son visibles (de eso es de lo que se trata clipsToBounds ). Visible, pero (debido a la forma en que funciona el tacto en iOS) no se puede tocar.

Estoy creando un UIView personalizado llamado InfoAboutBlockView, lo estoy agregando a mi ViewController y se agregó correctamente, pero cuando presiono un botón dentro de ese UIView personalizado no se activará.

Estoy creando un archivo xib en el que diseño UIView y luego creo los archivos .h y .m

InfoAboutBlockView.h:

#import <UIKit/UIKit.h> @interface InfoAboutBlockView : UIView - (instancetype)init2; @property (strong, nonatomic) IBOutlet UIView *contentView; @end

contentView es el UIView vinculado al archivo .h.

InfoAboutBlockView.m

#import "InfoAboutBlockView.h" @implementation InfoAboutBlockView - (instancetype)init2 { self = [super init]; if (self) { [self loadViewsFromBundle]; } return self; } - (void)loadViewsFromBundle { NSString *class_name = NSStringFromClass([self class]); [[NSBundle mainBundle] loadNibNamed:class_name owner:self options:nil]; [self addSubview:self.contentView]; } - (IBAction)startBlockButtonPressed:(id)sender { //This Won''t Fire } @end

El startBlockButtonPressed es el botón conectado al archivo .m. Establecí un punto de interrupción en startBlockButtonPressed pero nunca se dispara.

Así es como agrego la subvista personalizada a mi ViewController:

InfoAboutBlockView *infoAboutBlockView = [[InfoAboutBlockView alloc]init2]; [self.view addSubview:infoAboutBlockView];

Intenté llevarlo al frente usando [self.view bringSubviewToFront:infoAboutBlockView]; y verificó que no sea nil y que el botón no sea nil pero simplemente no se disparará.