0

它可能看起来像重复,但我实际上找不到任何关于我的具体情况的好的答案。我有一些带有背景图像(1pt 宽,拉伸)的按钮,里面有类似图标的图像以及文本标签。它的高度是 33pt,我需要使它的命中区域高 44pt。我看到了两种解决方案,但它们都不适合我。

第一个解决方案是放大框架并调整图像,使其有一些填充。但这对我来说是不可接受的,因为按钮内有背景图像和图像。

第二种解决方案是继承 UIButton (这是绝对可以接受的)和 override - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event。我这样做了,当我在此方法中放置一些断点并尝试在所需区域点击时,什么也没发生(在按钮框架内点击时断点有效)。

还有其他解决方案吗?第二种解决方案可能有什么问题?

4

1 回答 1

0

如果您以编程方式创建视图,则可以实例化一个 44px 高的 UIView,向其添加轻击手势识别器,并将您的 UIButton 作为子视图添加到该视图中:

CGRect bigFrame = CGRectMake(0,0,100,44);
UIView *big = [[UIView alloc] initWithFrame:bigFrame];

UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(doPress)];
[big addGestureRecognizer:tapRecognizer];

UIButton *yourButton = ...
[big addSubview:yourButton];
[self.view addSubview:big];

然后将选择器实现为:

- (void)doPress {
   [yourButton sendActionsForControlEvents:UIControlEventTouchUpInside];
}

这样,外部视图点击将被解释为您的按钮按下按钮。

于 2013-04-04T19:16:55.087 回答