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,但没有特别的理由这样做.
你会想看看的UIScrollViewDelegate-说你有两个滚动的看法,一个和乙.
使用scrollViewDidScroll滚动视图A的委托方法获取偏移量,然后在setContentOffset滚动视图B的同一方法调用中,传入从委托获得的值.
一旦你设置了委托方法,它实际上不应该超过2-3行代码.
另外,用户滚动的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
| 归档时间: |
|
| 查看次数: |
3423 次 |
| 最近记录: |