将两个UITableView一起滚动

时间:2011-11-30 23:10:32

标签: iphone objective-c

我有一个奇怪的设计案例,要实现我需要在同一个视图上放置两个UITableViews。我只想使用部分,但我需要第二个表上的索引。

我希望他们同时滚动,就像它们实际上是同一个表视图的两个部分一样。这可能吗?

这是一个基本的模型,说明了原因:

mockup

据我所知,你无法移动索引。此外,当您向表中添加索引时,它会显示在整个tableview上,而不仅仅是一个部分。

如果我必须将它作为两个表视图实现,它们都需要像它们一样滚动。如果可以使用部分来做到这一点,那就更好了。

3 个答案:

答案 0 :(得分:24)

<强>更新

在看到您的更新后,我的旧答案不是很好,但我会将其之前的答案留给其他想要它的人。

新答案 - 这取决于您希望表格同步的方式。

如果你知道

  1. top 5
  2. 中有哪些单元格
  3. 每个细胞的高度
  4. 表视图的偏移量
  5. 然后,您可以计算top 5表顶部可见的单元格。您可以使用此信息将底部表格滚动到正确的索引。


    旧答案

    我和其他人不相信你为什么要这么想,或者我是否会误解,但这很简单。

    UITableViewUIScrollView的子类,因此您可以将自己设置为UITableViewDelegate并覆盖

    - (void)scrollViewDidScroll:(UIScrollView *)scrollView;
    {
        UITableView *slaveTable = nil;
    
        if (self.table1 == scrollView) {
            slaveTable = self.table2;
        } else if (self.table2 == scrollView) {
            slaveTable = self.table1;
        }
    
        [slaveTable setContentOffset:scrollView.contentOffset];
    }
    

    这给了我一些看起来像这样的东西:

    enter image description here

    顶部UITableViewself.table1,底部为self.table2如果任一表格滚动,则滚动在另一个表格中进行镜像。

答案 1 :(得分:1)

从模型看来,这似乎可以通过一个UITableView来完成,有两个部分。

您可以维护两个集合(每个部分一个),而不是维护两个tableView。然后在cellForRowAtIndexPath中根据indexPath中指定的部分选择要使用的集合。

答案 2 :(得分:1)

在swift中这段代码:

func scrollViewDidScroll(scrollView: UIScrollView) {
    if tb_time1 == scrollView {
        tb_time2.contentOffset = tb_time1.contentOffset
    }else if tb_time2 == scrollView {
        tb_time1.contentOffset = tb_time2.contentOffset
    }
}