iPhone-如何对称滚动两个UITableView
在我的应用程序中,我有两个并排的桌面视图。当用户滚动时,我希望第二个可以同时滚动,因此它看起来几乎像一个包含两个不同列的表。我不知道该怎么做,有什么建议吗 谢谢,iPhone-如何对称滚动两个UITableView,iphone,uitableview,scroll,Iphone,Uitableview,Scroll,在我的应用程序中,我有两个并排的桌面视图。当用户滚动时,我希望第二个可以同时滚动,因此它看起来几乎像一个包含两个不同列的表。我不知道该怎么做,有什么建议吗 谢谢, Greg您需要查看UIScrollViewDelegate——假设您有两个滚动视图,A和B 使用scroll viewA的scroll ViewDidScrolldelegate方法获取偏移量,然后在同一方法中调用scroll viewB上的setContentOffset,传递从委托获得的值 实际上,一旦设置了委托方法,它不应该超过
Greg您需要查看
UIScrollViewDelegate
——假设您有两个滚动视图,A和B
使用scroll viewA的scroll ViewDidScroll
delegate方法获取偏移量,然后在同一方法中调用scroll viewB上的setContentOffset
,传递从委托获得的值
实际上,一旦设置了委托方法,它不应该超过2-3行代码。方便地说,UITableView是UIScrollView的一个子类。存在一个UIScrollViewDelegate,它具有以下方法:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
如果实现该方法,则可以获得scrollView
参数的contentOffset
属性。那么,你应该使用
- (void)setContentOffset:(CGPoint)contentOffset animated:(BOOL)animated
并设置新的内容偏移量。比如说:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
UIScrollView *otherScrollView = (scrollView == self.tableView1) ? self.tableView2 : self.tableView1;
[otherScrollView setContentOffset:[scrollView contentOffset] animated:NO];
}
如果愿意,您可以强制转换到UITableView,但没有特别的理由这样做。此外,用户滚动的tableview不应发送到scrollViewDidScroll中的setContentOffset:message,因为它会让应用进入无休止的循环。因此,应实施其他UIScrollViewDelegate方法以解决此问题:
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
beingScrolled_ = nil;
}
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
if(beingScrolled_ == nil)
beingScrolled_ = scrollView;
}
并相应地修改Inspire48的版本scrollViewDidScroll:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
UIScrollView *otherScrollView = (scrollView == self.tableView1) ? self.tableView2 : self.tableView1;
if(otherScrollView != beingScrolled)
{
[otherScrollView setContentOffset:[scrollView contentOffset] animated:NO];
}
}
其中beingScrolled_uu是swift scroll中UIScrollView类型的ivar,对称地滚动两个UITableView:
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
}
}
UITableView是UIScrollView的一个子类。Swift解决方案:
extension yourViewController: UIScrollViewDelegate {
func scrollViewDidScroll(_ scrollView: UIScrollView) {
let otherScrollView = (scrollView == tableViewLeft) ? tableViewRight : tableViewLeft
otherScrollView?.setContentOffset(scrollView.contentOffset, animated: false)
}
}
并阻止两张桌子的反弹
tableViewLeft.bounces = false
tableViewRight.bounces = false
如果您想使垂直滚动指示器启动,请编写以下代码
tableViewLeft.showsVerticalScrollIndicator = false
tableViewRight.showsVerticalScrollIndicator = false
我想说,从语义上讲,转换为UITableView更好,而且有利于可读性。不过,在这种情况下,从编程的角度来说,这并不重要耶,工作得很好:)谢谢!我会投赞成票,但我写这篇文章时没有15个代表点!我不保证将来的iOS版本会破坏它,但我不明白为什么会这样。不知道你是否可以在这里帮助我。我在tableview中有一个collectionview,希望同步滚动。我该怎么做?我是否必须以某种方式将TableView委托发送到CollectionView单元格,以便它们都依赖于相同的
scrollViewDidScroll(\uScrollView:UIScrollView)
?