UIButton正确的TouchUp检测

时间:2012-07-19 10:43:29

标签: uibutton uicontrolevents

当有人点击UITableViewCell中的按钮时,我使用以下代码调用函数。不幸的是,即使在按钮区域外发布触摸,代码仍会被调用。 (例如,触摸按钮,滑动手指关闭按钮,按钮仍然有效)。

有人可以告诉我为什么会这样,或者这样做的正确方法是什么?我想也许我的问题是“addTarget”子句 - 也就是说TouchUpInside指的是我的UITableView而不是按钮本身?

[cellPeriod.myButton1 addTarget:self action:@selector(buttonClickedStopWatch:) forControlEvents:UIControlEventTouchUpInside];

1 个答案:

答案 0 :(得分:2)

该问题与UITableView无关。

我想也许Apple故意这样做,因为我们的手指不是鼠标。您可以查看Apple生产的应用程序,它也有问题。你可以看到navigationBar的backItemButton。

如果你想解决它,可以使用UIControl的方法:

 - (void)endTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event; 

要检查此点是否在按钮的矩形内。您可以添加BOOL值来决定是否继续执行选择器

加入:

#import "MyButton.h"

@implementation MyButton

- (void)endTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event
{
    CGPoint location = [touch locationInView:self];
    CGRect btnRect = CGRectMake(0, 0, self.frame.size.width, self.frame.size.height);
    if (CGRectContainsPoint(btnRect, location)) {
        self.tag=-1;
        return;
    }
    self.tag=-2;
}
@end