iPad:可以使用多个流动列的表格视图?

时间:2010-12-10 00:53:46

标签: ipad

我在网上搜索过这个并没有找到任何东西。在iPad上,是否有可能,而不是从屏幕上流出,项目“流向”右侧的新列,依此类推?

不要:

--------------  top of screen
01
02
03
04
05
-------------- bottom of screen
06
07
08
09    <-- these items are "scrolled" off the screen
10
11
12
13

想要:

--------------  top of screen
01 |06 |11
02 |07 |12
03 |08 |13     --> Columns grow to the right
04 |09 |
05 |10 |
-------------- bottom of screen

2 个答案:

答案 0 :(得分:2)

您必须编写自己的自定义类才能执行此操作。表视图的重点是将列表保留在单个垂直列中。这就是拆分视图在iPad上运行良好的原因;您可以一次显示两个级别的数据层次结构。

答案 1 :(得分:2)

思想实验:使用三个tableviews,但使用相同的datasource / delegate。将其连线,以便每当一个视图滚动时(即通过–scrollViewDidScroll:),您还可以使用-setContentOffset手动滚动其他视图到适当的位置。你应该注意可能的循环调用。我不能保证这会起作用,但这是我能想到的尽可能接近的。

如果您希望最左侧的视图能够滚动到底部,或者最右侧的视图滚动到顶部,您可能还想为特定视图添加额外的行。

编辑:在大多数情况下,它看起来像基本的一样。我只是试了一下,并没有太糟糕。但是你需要注意一些小怪癖,包括循环调用和scrollview的减速。

对于我前面提到的循环调用,我使用以下代码管理它:

-(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{
    tableView1.delegate = nil;
    tableView2.delegate = nil;
    tableView3.delegate = nil;
    scrollView.delegate = self;
}

-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
    tableView1.delegate = self;
    tableView2.delegate = self;
    tableView3.delegate = self;
}

至于之后的减速,并不是其他观点不会与它们一起减速,但如果你在减速时接触到其中一个,那么这些观点会有点不稳定。在这种情况下我没有尝试过,看看它是否能100%正常工作,但你应该尝试从here开始编码,以便在你再次开始拖动减速时停止减速。