iPhone - 如何对称地滚动两个UITableViews

Gre*_*reg 4 iphone scroll uitableview

在我的应用程序中,我有两个tableViews并排.当用户滚动时,我希望第二个同时滚动,所以它看起来几乎像一个有两个不同列的表.我有点迷失如何去做这个,有什么建议吗?

谢谢,格雷格

Fei*_*anZ 11

方便的是,UITableView是UIScrollView的子类.存在一个UIScrollViewDelegate,它具有以下方法:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
Run Code Online (Sandbox Code Playgroud)

如果实现该方法,则可以获取参数的contentOffset属性scrollView.然后,你应该使用

- (void)setContentOffset:(CGPoint)contentOffset animated:(BOOL)animated
Run Code Online (Sandbox Code Playgroud)

并设置新的内容偏移量.所以像这样:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    UIScrollView *otherScrollView = (scrollView == self.tableView1) ? self.tableView2 : self.tableView1;
    [otherScrollView setContentOffset:[scrollView contentOffset] animated:NO];
}
Run Code Online (Sandbox Code Playgroud)

如果您愿意,可以转换为UITableView,但没有特别的理由这样做.


lxt*_*lxt 9

你会想看看的UIScrollViewDelegate-说你有两个滚动的看法,一个.

使用scrollViewDidScroll滚动视图A的委托方法获取偏移量,然后在setContentOffset滚动视图B的同一方法调用中,传入从委托获得的值.

一旦你设置了委托方法,它实际上不应该超过2-3行代码.


Rus*_*ian 7

另外,用户滚动的tableview不应该在scrollViewDidScroll中发送setContentOffset:message,因为它会让应用程序进入无限循环.所以应该实现额外的UIScrollViewDelegate方法以解决问题:

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
    beingScrolled_ = nil;
}

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{    
    if(beingScrolled_ == nil)
        beingScrolled_ = scrollView;
}
Run Code Online (Sandbox Code Playgroud)

并修改Inspire48的版本scrollViewDidScroll:相应:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    UIScrollView *otherScrollView = (scrollView == self.tableView1) ? self.tableView2 : self.tableView1;
    if(otherScrollView != beingScrolled)
    {
        [otherScrollView setContentOffset:[scrollView contentOffset] animated:NO];
    }
}
Run Code Online (Sandbox Code Playgroud)

其中beingScrolled_是UIScrollView类型的ivar