在我的应用中,我有两个并排的tableView。当用户滚动时,我希望第二个同时滚动,所以它看起来几乎像一个有两个不同列的表。我有点迷失在如何做这个,有什么建议吗?
谢谢, 格雷格
答案 0 :(得分:11)
方便的是,UITableView是UIScrollView的子类。存在一个UIScrollViewDelegate,它有这个方法:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
如果实现该方法,则可以获取contentOffset
参数的scrollView
属性。然后,你应该使用
- (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,但没有特别的理由这样做。
答案 1 :(得分:9)
您需要查看UIScrollViewDelegate
- 说您有两个滚动视图, A 和 B 。
使用滚动视图 A 的scrollViewDidScroll
委托方法获取偏移量,然后在滚动视图 B setContentOffset >,传递你从代表那里获得的价值。
一旦你设置了委托方法,它实际上不应该超过2-3行代码。
答案 2 :(得分:7)
另外,用户滚动的tableview不应该在scrollViewDidScroll中发送setContentOffset:message,因为它会让app进入无限循环。所以应该实现额外的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_是类型为UIScrollView的ivar
答案 3 :(得分:1)
UITableView是UIScrollView的子类。快速解决方案:
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
答案 4 :(得分:0)
快速滚动两个对称的uitableviews:
MW=[x if x <1000 else 1001 for x in MW]
b,bins = np.histogram(MW,bins=11,range=(0,1100))