当有人点击UITableViewCell中的按钮时,我使用以下代码调用函数。不幸的是,即使在按钮区域外发布触摸,代码仍会被调用。 (例如,触摸按钮,滑动手指关闭按钮,按钮仍然有效)。
有人可以告诉我为什么会这样,或者这样做的正确方法是什么?我想也许我的问题是“addTarget”子句 - 也就是说TouchUpInside指的是我的UITableView而不是按钮本身?
[cellPeriod.myButton1 addTarget:self action:@selector(buttonClickedStopWatch:) forControlEvents:UIControlEventTouchUpInside];
答案 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