自定义UIButton类的子视图不会触发单击

时间:2012-12-11 13:27:14

标签: ios uibutton subview user-interaction

我正在编写一个自定义的UIButton子类,以创建我自己的完全自定义按钮 有完全控制权。不过,当我尝试添加子视图时,我遇到了问题 对UIButton的看法。子视图阻止“触摸”事件,因此它不会冒泡 UIButton本身..

这是一个示范: 我首先使用框架创建我的CustomNavigationButton ..它是洋红色的。 我可以在屏幕上看到洋红色所以它就在那里。其次,我添加了一个子视图 对于那个CustomNavigationButton(绿色),我可以看到它的绿色 那里,但如果我点击绿色矩形(子视图),“UIControlEventTouchUpInside” 不会在我的CustomNavigationButton上调用..

在我的AppDelete中:

CustomNavigationButton* mapBtn = [[CustomNavigationButton alloc] initWithFrame:CGRectMake(0, 0, 100, 25)];
mapBtn.backgroundColor = [UIColor magentaColor];
[mapBtn addTarget:self action:@selector(goMapHandler:) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:mapBtn];

这是我的CustomNavigationButton类(它是UIButton的子类)

@implementation CustomNavigationButton
@synthesize bg;
- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {

        // STORE INITIAL FRAME
        self.initialFrame = frame;

        bg = [[UIView alloc] initWithFrame:CGRectMake(0, 20, 40, 40)];
        bg.backgroundColor = [UIColor greenColor];
        [bg setUserInteractionEnabled:YES];
        [self addSubview:bg];       

    }
    return self;
}
@end

1 个答案:

答案 0 :(得分:4)

我想出了怎么做! 如果“bg”是我要添加到UIButton的子视图,那么你应该这样做:

bg.userInteractionEnabled = NO;
bg.exclusiveTouch = NO;

但请记住,如果您的子视图扩展了UIButton的框架, 触摸不会发生!您可以检查您的子视图是否超过UIButton 通过给UIButton一个背景色。