我正在创建一个名为InfoAboutBlockView的自定义UIView,将其添加到ViewController中并正确添加,但是当我按下该自定义UIView中的按钮时,它将不会触发。
我正在创建一个xib文件,在其中设计UIView,然后创建.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文件的按钮。我在
startBlockButtonPressed
处设置了一个断点,但是它从未触发。这是将自定义子视图添加到ViewController的方法:
InfoAboutBlockView *infoAboutBlockView = [[InfoAboutBlockView alloc]init2];
[self.view addSubview:infoAboutBlockView];
我尝试使用
[self.view bringSubviewToFront:infoAboutBlockView];
将其放到最前面,并检查它是否不是nil
以及该按钮不是nil
,但它不会触发。 最佳答案
这基本上是我在这里给出的相同答案:https://stackoverflow.com/a/22188740/341994
问题是您的InfoAboutBlockView没有大小。 (您从未给过它一个框架,所以它的框架为零。)因此,它是不可触摸的。因此,其所有子视图都不可触摸。该按钮是可见的,并且InfoAboutBlockView的contentView
可能可见,但是它们在InfoAboutBlockView的范围之内,InfoAboutBlockView是单个点的大小。并且无法触及其超视图范围之外的子视图。
如果为InfoAboutBlockView提供了怪异的背景色,这将更加明显。加载时您不会看到该颜色。
InfoAboutBlockView *infoAboutBlockView = [[InfoAboutBlockView alloc]init2];
[self.view addSubview:infoAboutBlockView];
infoAboutBlockView.backgroundColor = [UIColor redColor]; // you won't see the red
另一种查看方式是将InfoAboutBlockView的
clipsToBounds
设置为YES;在这种情况下,您将看不到该按钮。InfoAboutBlockView *infoAboutBlockView = [[InfoAboutBlockView alloc]init2];
[self.view addSubview:infoAboutBlockView];
infoAboutBlockView.clipsToBounds = YES; // you won't see the button!
基本上,这就是麻烦的全部原因;当
clipsToBounds
为NO时,可以看到视图范围之外的子视图(这就是clipsToBounds
所针对的),这一事实使您感到困惑。可见,但(由于iOS上的触摸方式)不可触摸。