我用三个视图实现了这一点,通过标准协议和单个视图控制器进行管理。在这个解决方案中,你只关心链接两个表视图控制器的垂直滚动。水平滚动通过包装表视图主体的滚动视图免费提供。我利用下面的UITableViewDelegate函数来获取锁定列标题:
-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section;
视图结构:
- View - The VCs root view
- Table View - rowHeadersTable - the locked left hand columns
- Scroll View - rowBodyHorizontalScrollView - a container of the table body
- Table View - rowBodyVerticalContentTableView - the table body, as wide as it needs to be beyond the frame of the parent scroll view
视图控制器:
实现协议:
@interface LockedTableColumnsViewController : UIViewController <UITableViewDataSource,UITableViewDelegate>
设置:
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
[self.rowHeadersTable setDataSource:self];
[self.rowHeadersTable setDelegate:self];
[self.rowBodyVerticalContentTableView setDataSource:self];
[self.rowBodyVerticalContentTableView setDelegate:self];
}
-(void)viewDidAppear:(BOOL)animated
{
// This ensures the scroll view can only scroll horizontally, and adapts to the size of its member content
[self.rowBodyHorizontalScrollView setContentSize:self.rowBodyVerticalContentTableView.frame.size]; // Important to do this here rather than viewDidLoad, because we want a final reading on self.rowBodyVerticalContentTableView.frame.size
[super viewDidAppear:animated];
}
// Do your Table Data Source however you choose
管理的垂直滚动rowHeadersTable和rowBodyVerticalContentTableView之间的链接:
-(void)scrollViewDidScroll:(UIScrollView *)scrollView
{
if (scrollView == self.rowBodyVerticalContentTableView) {
[self.rowHeadersTable setContentOffset:CGPointMake(self.rowHeadersTable.contentOffset.x, scrollView.contentOffset.y)];
}
else if (scrollView == self.rowHeadersTable) {
[self.rowBodyVerticalContentTableView setContentOffset:CGPointMake(self.rowBodyVerticalContentTableView.contentOffset.x, scrollView.contentOffset.y)];
}
}
N.B.由于它使用了原型单元格等,因此这对长时间(意思是高的)表格来说会表现的很好。但是它并不针对水平激烈的行内容进行优化。我的表格内容是文本,列数有限。如果你没有这种奢侈品,你总是可以使你的表格行身为水平流动的集合视图,但是你必须链接所有的行集合视图偏移量(通过我猜测的可见单元格)。那是另外一种动物。祝你好运!
我们已将所有这些功能内置到我们的产品中:http://www.ioscomponents.com/Home/IOSDataGrid – 2014-08-31 23:53:29