我的子视图中的UIButton不起作用

时间:2014-03-12 01:17:43

标签: ios objective-c cocoa-touch uiview uibutton

我正在创建一个名为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但它不会触发。

1 个答案:

答案 0 :(得分:4)

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

问题是您的InfoAboutBlockView没有大小。 (你从来没有给它一个帧,所以它的帧是零。)因此它是不可触摸的。因此,它的子视图都不可触摸。该按钮是可见的,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;在这种情况下,你不会看到按钮。

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

基本上这就是麻烦的全部原因;当clipsToBounds为NO时,你会被一个视图边界之外的子视图看到(这就是clipsToBounds的意思)。可见,但(因为触摸在iOS上工作的方式)不可触摸。