我想在单个屏幕上制作两个表格,这样如果表格A向下滚动,表格B同时向上滚动。有人可以编码或为我提供任何简单的方法。
答案 0 :(得分:3)
UITableView
派生自UIScrollView
,因此您可以使用一个表格视图的viewDidScroll
委托方法来控制其他表格视图滚动位置。
答案 1 :(得分:2)
正如吴宝所说,你必须使用UIScrollViewDelegate
。但你必须检查,此刻scrollView正在拖动/活动。因为否则你会遇到这样的问题:你将从两个滚动视图中获得委托回调,并且它们会同时给予彼此更改,从而导致无限循环/无限滚动。
详细说明,您必须检查:- (void)scrollViewDidScroll:(UIScrollView *)scrollView
但是你必须记住以前的偏移,所以你知道值的变化。
(或者您的视图具有相同的高度。然后您可以使用contentSize.height-offset
作为其他视图的偏移量。
我会尝试将其写下来(未经测试):
@interface ViewController () <UITableViewDelegate,UIScrollViewDelegate>
// instances of your tableviews
@property (nonatomic, strong) UITableView *tableLeft;
@property (nonatomic, strong) UITableView *tableRight;
// track active table
@property (nonatomic, strong) UIScrollView* activeScrollView;
// helpers for contentoffset tracking
@property (nonatomic, assign) CGFloat lastOffsetLeft;
@property (nonatomic, assign) CGFloat lastOffsetRight;
@end
@implementation ViewController
- (void) viewDidLoad
{
[super viewDidLoad];
self.tableLeft.delegate = self;
self.tableRight.delegate = self;
}
– (void) scrollViewWillBeginDragging: (UIScrollView*) scrollView
{
self.activeScrollView = scrollView;
self.tableViewRight.userInterActionEnabled = (self.tableViewRight == scrollView);
self.tableViewLeft.userInterActionEnabled = (self.tableViewLeft == scrollView);
}
- (void) scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
if(!decelerate) {
self.activeScrollView = nil;
self.tableViewRight.userInterActionEnabled = YES;
self.tableViewLeft.userInterActionEnabled = YES;
}
}
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
self.activeScrollView = nil;
self.tableViewRight.userInterActionEnabled = YES;
self.tableViewLeft.userInterActionEnabled = YES;
}
- (void) scrollViewDidScroll:(UIScrollView *)scrollView
{
if(self.activeScrollView == self.tableViewLeft)
{
CGFloat changeLeft = self.tableViewLeft.contentOffset.y - self.lastOffsetLeft;
self.tableViewRight.contentOffset.y += changeLeft;
}
else if (self.activeScrollView == self.tableViewRight)
{
CGFloat changeRight = self.tableViewRight.contentOffset.y - self.lastOffsetRight;
self.tableViewLeft.contentOffset.y += changeRight;
}
self.lastOffsetLeft = self.tableViewLeft.contentOffset.y;
self.lastOffsetRight = self.tableViewRight.contentOffset.y;
}
@end
基本上就是这样。它还会锁定不活动的scrollview。因为滚动两者都会导致丑陋的行为。 contentOffset.y += changeLeft;
也许不会工作。您必须创建一个新的CGPoint / CGSize。