在我的子视图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上触摸的方式)不可触摸。