我有一个简单的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正确实现此功能的任何想法?谢谢!
答案 0 :(得分:1)
通过返回更大区域的self
,您可以欺骗hitTest
逻辑,使其认为按钮大于它。这应该会导致按钮触发操作,而无需在sendActionsForControlEvents
方法中调用hitTest
。