代码之家  ›  专栏  ›  技术社区  ›  SparkyNZ

UIButton正确触摸检测

  •  0
  • SparkyNZ  · 技术社区  · 14 年前

    当有人点击UITableViewCell中的按钮时,我使用以下代码来调用一个函数。不幸的是,即使在按钮区域外释放触摸,代码仍会被调用。(例如,触摸按钮,将手指从按钮上滑下,按钮仍然有效)。

    有人能告诉我为什么会发生这种情况吗?或者正确的做法是什么?我想我的问题可能是“addTarget”子句——也就是说,TouchUpInside可能指的是我的UITableView,而不是按钮本身??

    [cellPeriod.myButton1 addTarget:self action:@selector(buttonClickedStopWatch:) forControlEvents:UIControlEventTouchUpInside];
    
    1 回复  |  直到 14 年前
        1
  •  2
  •   cloosen    14 年前

    该问题与UITableView无关。

    我想也许苹果是故意这么做的,因为我们的手指不是鼠标。你可以查看苹果公司生产的应用程序,它也有问题。您可以看到导航栏的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