2011-01-05 59 views
4

我有一个UIPickerView在一个表的页脚(我从中计划为表格发出“分页”式的请求 - 选择器将列出可用的页面我正在浏览的LARGE数据集,并让用户直接跳到数据的任何“页面”)。UIPickerView里面的UITableView.tableFooterView没有收到拖动触摸

我选择器接收水龙头;如果我点击不是所选择的选择器的一行,它将滚动到选取器的中心空间。但是,如果我将手指拖到拾取器上,则滚动TABLE而不是拾取器内容。

我试着在我的tableFooterView中安装一个UIView子类来查看是否可以捕捉触摸,并且我可以......但没有触及到选择器。在选择器周围触摸确实会触发UIView子类的-touchesBegan。但不是选择器本身。

回答

8

这里是结束了工作。

我做了我的表成的UITableView(称为PickerSensitiveUITableView)的子类。当触摸选择器的边界内发生所以现在

- (UIView*)hitTest:(CGPoint)point withEvent:(UIEvent *)event 
{ 
    UIView* result = [super hitTest:point withEvent:event]; 

    if ([result.superview isKindOfClass:[UIPickerView class]]) 
    { 
      self.scrollEnabled = NO; 
    } 
    else 
    { 
      self.scrollEnabled = YES;  
    } 
    return result; 
} 

它关闭的UITableView的滚动性:

的我实现了这个方法(实际上表中的任何选择器!)。

它发生,我更一般的解决办法是这样做,因为在UIScrollView的一个类别。问题不在于有桌子这么多,因为与UITableView的是一个子类的UIScrollView ...

+0

的东西与类别是压倒一切的方法不能保证。 – Pacu 2011-02-11 07:20:28

+1

真棒解决方案,聪明而简单。允许我在位于水平滚动视图的tableview中启用滑动删除。非常感谢。 – Jukurrpa 2012-11-15 13:18:47

+0

非常好,非常感谢,丹。 – DrMickeyLauer 2013-05-28 15:48:44