1

我正在编写一个自定义 UIButton 子类,以创建我自己的完全自定义按钮来完全控制。尽管如此,当我尝试将子视图添加到该 UIButton 的视图时,我还是遇到了问题。子视图阻止“触摸”事件,因此它不会冒泡到 UIButton 本身。

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

在我的 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
4

1 回答 1

4

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

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

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

于 2012-12-11T13:38:00.207 回答