hitTest:withEvent:两次调用sendActionsForControlEvents

时间:2014-05-14 03:38:52

标签: ios uibutton hittest

我有一个简单的UIButton子类,我只是想扩展按钮的触摸区域,而不是实际增加帧(这是因为我希望高亮显示和所选背景是原始帧的大小)。

这是我添加到我的UIButton子类中的内容:

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {

    int errorMargin = 20;
    CGRect largerFrame = CGRectMake(0 - (errorMargin / 2), 0 - (errorMargin / 2), self.frame.size.width + errorMargin, self.frame.size.height + errorMargin);

    if ((CGRectContainsPoint(largerFrame, point)) == 1){

        NSLog(@"Sending Action");
        [self sendActionsForControlEvents:UIControlEventTouchUpInside];

        return self;
    }
    else{
        return nil;
    }

}

这很有效;但是,它正在两次调用所需的操作。因此,例如,“标签”按钮将被点击一次,但是标签两次。

我发现了一些与UIControl和beginTracking方法相关的问题,但我无法使用UIButton。

有关如何使用UIButton正确实现此功能的任何想法?谢谢!

1 个答案:

答案 0 :(得分:1)

通过返回更大区域的self,您可以欺骗hitTest逻辑,使其认为按钮大于它。这应该会导致按钮触发操作,而无需在sendActionsForControlEvents方法中调用hitTest