在我的子视图UIButton将无法正常工作

我创build一个名为InfoAboutBlockView的自定义UIView,我将它添加到我的ViewController,它正确地添加,但是当我按下该自定义UIView内的button不会触发。

我正在创build一个xib文件,在其中deviseUIView,然后创build.h和.m文件

InfoAboutBlockView.h:

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

contentView是链接到.h文件的UIView。

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 

startBlockButtonPressed是连接到.m文件的button。 我在startBlockButtonPressed设置了一个断点,但是它从不触发。

这是我如何将自定义子视图添加到我的ViewController:

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

我试着把它带到前面[self.view bringSubviewToFront:infoAboutBlockView]; 并检查它不是nil ,该button不是nil但它不会触发。

这与我在这里给出的基本相同的答案: https : //stackoverflow.com/a/22188740/341994

问题是您的InfoAboutBlockView没有大小。 (你从来没有给它一个框架,所以它的框架是零)因此它是不可触摸的。 因此,它的子视图都不可触摸。 该button是可见的,并且InfoAboutBlockView的contentView可能是可见的,但它们在InfoAboutBlockView的边界之外,这是单点的大小。 而超视界之外的子视图是无法触及的。

如果您给InfoAboutBlockView一个奇怪的背景颜色,这将更明显。 加载时不会看到这种颜色。

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

另一种看到这个的方法是将InfoAboutBlockView的clipsToBounds设置为YES; 在这种情况下,你不会看到button。

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

基本上这是麻烦的全部原因; 你被愚蠢的事实,当clipsToBounds是NO,视图的边界以外的子视图是可见的(这是什么clipsToBounds是关于)。 可见,但(因为在iOS上触摸的方式)不可触摸。