2

我在视图中添加了UIButton一个类型为UIButtonTypeInfoDark的,它的触摸区域很大。我知道 Apple 推荐 44px,但在这种情况下,它要大一些。我为视图设置了一个浅灰色背景,以查看 44px 的结束区域在哪里,并且我可以在浅灰色视图区域之外触摸并仍然接收到infoTapped:事件。

谁能澄清为什么?谢谢!

_infoButton = [UIButton buttonWithType:UIButtonTypeInfoDark];
[_infoButton setShowsTouchWhenHighlighted:NO];
[_infoButton setFrame:CGRectMake(frame.size.width-44, 0, 44, 25)];
[_infoButton setBackgroundColor:[UIColor lightGrayColor]];
[_infoButton addTarget:self action:@selector(infoTapped:) forControlEvents:UIControlEventTouchUpInside];
4

2 回答 2

0

有一个更简单的版本来检查用户是否触摸了信息按钮边界的内部或外部。只需检查 touchInside 的状态。

if ([control isKindOfClass:[UIButton class]]) {
    UIButton *btn = (UIButton*)control;

    if (btn.buttonType == UIButtonTypeInfoDark && btn.touchInside == YES) {
        // User pressed button inside bounds...
    } else if (btn.buttonType == UIButtonTypeInfoDark && btn.touchInside == NO) {
        // User pressed button outside bounds...
    }
}
于 2014-03-23T13:49:53.093 回答
0

要解决这个问题很可能需要子类化。您可以pointInside:withEvent:UIButton子类中覆盖并返回NO,除非严格在按钮的范围内:

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event {
    return CGRectContainsPoint(self.bounds, point);
}

Apple 控件有时会返回YES到超出其范围的查询,以使控件更易于用手指触摸。

于 2013-04-30T14:27:20.883 回答