【问题标题】:UITableView behin UIScrollViewUIScrollView 后面的 UITableView
【发布时间】:2013-01-20 03:22:15
【问题描述】:

根据我的需要,我在 UISCrollView 下直接添加了一个 UITableView :

--- 主界面视图

-------- UITableView

-------- UIScrollView

因此,当我滚动滚动视图时,我会更改表视图的内容偏移量。它完美地工作。 但是当我尝试选择一个单元格时,我无法捕获委托方法:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 

有什么特别的事情要做吗?我试图继承 UIScrollView 并实现:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

它可以工作,但我无法滚动我的 UIScrollView ...

【问题讨论】:

  • 看起来你的滚动视图正在捕捉所有的触摸事件,因为它覆盖了表格视图。
  • 是的,这就是为什么我想知道是否有办法将触摸事件传输到它下面的视图......
  • 可能您应该将所有点击事件转发到 tableview 并将所有其他触摸事件保留到 uiscrollview,到目前为止,您通过 - (void)touchesBegan:(NSSet * 将所有内容发送到 table view ) 触及事件:(UIEvent *) 事件。虽然这可以实现,但请检查您的逻辑。你的做法是不对的。将有另一种方式来实现你想要的。
  • 为什么你的表格视图上有滚动视图?你确定它需要在那里吗?
  • 这应该回答你的问题:stackoverflow.com/questions/11480201/…

标签: ios objective-c uitableview uiscrollview didselectrowatindexpath


【解决方案1】:

试试这个,

-(void)handleSingleTap:(UILongPressGestureRecognizer *)gestureRecognizer{
    CGPoint p = [gestureRecognizer locationInView:myScroll];
    NSIndexPath *indexPath = [myTable indexPathForRowAtPoint:p];
    [myTable selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone];
    [self tableView:myTable didSelectRowAtIndexPath:indexPath];
}

你必须使用 UITapGestureRecognizer...

UITapGestureRecognizer *tpgr = [[UITapGestureRecognizer alloc]
                                initWithTarget:self action:@selector(handleSingleTap:)];
tpgr.numberOfTapsRequired = 1;
[myScroll addGestureRecognizer:tpgr];

【讨论】:

  • 这是一个很好的答案,我完成了这个链接:stackoverflow.com/questions/7667151/…。 selectRowAtIndexPath 方法从不调用 tableView 委托方法。谢谢你的小费:)
  • 我不明白为什么你的手势需要代表
  • 在我的例子中,我使用了一种委托方法,如果你不这样做,你可以删除它,它仍然可以正常工作。
猜你喜欢
  • 1970-01-01
  • 2016-11-11
  • 1970-01-01
  • 2012-06-11
  • 2023-03-25
  • 1970-01-01
  • 2011-11-11
  • 1970-01-01
相关资源
最近更新 更多