UITableView取消动作

问题描述:

我想用UITableView的行为像userInteractionEnabled == NO(表应该停止被用户移动)。但我希望能够激活它在用户移动的UITableViewUITableView取消动作

如果我只设置

[self.tableView setUserInteractionEnabled:NO]; 

用户停止接触后,这种行为将被激活。

有关我如何完成它的任何想法?

我发现了如何做到这一点,我不能相信我错过此属性:

[myTableView setScrollEnabled:NO]; 

您可以继承UITableView并覆盖touchesEnded:withEvent :.当用户抬起手指时,这种方法会被击中。由于您可能不希望在用户轻触屏幕时禁用用户交互,您可以捕获初始触摸开始点和触摸结束点。从这两者中,您可以比较Y的变化量,以便确定用户在禁用用户交互之前要移动的程度。这里有一些代码可以帮助你。

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    UITouch * touch = [touches anyObject]; 
    touchStartPoint = [touch locationInView:self]; 
} 

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { 
    UITouch * touch = [touches anyObject]; 
    CGPoint touchEndPoint = [touch locationInView:self]; 
    CGFloat deltaY = touchStartPoint.y - touchEndPoint.y; 

    if (fabsf(deltaY) >= kMinimumYMoved) { 
     self.userInteractionEnabled = NO; 
    } 
} 
+0

只是一个警告:重写一个UIScrollView的事件处理可能充满了危险,如果你”在事件周期中不会100%舒适地发生。 – 2010-08-07 18:12:38

+0

我已经知道在哪里停止触摸处理。问题是将userInteractionEnablet设置为NO不会导致触摸停止处理。 – Daniel 2010-08-09 07:36:08