它可能看似重复,但我实际上找不到任何有效的具体情况。 我有一些带有背景图像的按钮(1pt宽,拉伸),里面带有图标的图像以及文本标签。它的高度是33pt,我需要让它达到44pt高的最高区域。 我看到了两种解决方案,但它们都不适合我。
首先解决方案是放大帧并调整图像,这样它就会有一些填充。但这对我来说是不可接受的,因为我在按钮内都有背景图像和图像。
第二个解决方案是子类UIButton(绝对可以接受)并覆盖- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
。我这样做了,当我在这个方法中放入一些断点并尝试在所需区域中点击时没有发生任何事情(在按钮框架内点击时断点有效)。
还有其他解决方案吗?第二种解决方案可能出现什么问题?
答案 0 :(得分: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];
}
这样,外部视图点击将被解释为按钮按下按钮。