Ios 放大UI按钮';s按钮的最大区域,其中包含背景图像、图像视图和标签

Ios 放大UI按钮';s按钮的最大区域,其中包含背景图像、图像视图和标签,ios,uibutton,Ios,Uibutton,这看起来像是重复的,但实际上我找不到任何好的答案来回答我的具体情况。 我有一些按钮与背景图像(1吨宽,拉伸),图标一样的图像连同文本标签内。它的高度是33磅,我需要使它的最危险区域高44磅。 我看到了两种解决方案,但都不适合我 第一种解决方案是放大画面并调整图像,使其具有一定的填充效果。但这对我来说是不可接受的,因为我有背景图像和按钮内的图像 第二种解决方案是将UIButton子类化(这是绝对可以接受的),并用event(UIEvent*)event(UIView*)覆盖-(UIView*)hi

这看起来像是重复的,但实际上我找不到任何好的答案来回答我的具体情况。 我有一些按钮与背景图像(1吨宽,拉伸),图标一样的图像连同文本标签内。它的高度是33磅,我需要使它的最危险区域高44磅。 我看到了两种解决方案,但都不适合我

第一种解决方案是放大画面并调整图像,使其具有一定的填充效果。但这对我来说是不可接受的,因为我有背景图像和按钮内的图像

第二种解决方案是将UIButton子类化(这是绝对可以接受的),并用event(UIEvent*)event(UIView*)覆盖
-(UIView*)hitTest:(CGPoint)point。我这样做了,当我在这个方法中放置一些断点,并试图在所需的区域中点击时,什么都没有发生(当在按钮框中点击时,断点起作用)


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

如果以编程方式创建视图,则可以实例化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];
}

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

谢谢。这似乎是一个很好的选择,尽管我真的很想看到一些其他的选择,我仍然想知道这个
-hitTest:withEvent:
解决方案有什么问题。嗯,似乎没有其他答案,所以我接受你的答案。我最终创建了父视图,并在其中使用了
-hitTest:withEvent:
,它成功了。我所需要的只是更好地了解
-hitTest:withEvent:
的工作原理。也许你应该试试自定义按钮。或者,自定义视图。