【发布时间】:2014-06-25 15:39:15
【问题描述】:
我有一个带有表格视图的段控件。当用户单击段控件时,表格视图会更改数据源。我希望表格滚动到用户看到的最后一个位置。
例如:用户在第 1 段,正在查看第 3 行的表格视图。
第 1 段 |第 2 段
第 3 行
第 4 行
第 5 行
然后用户点击了分段 2,然后点击返回到分段 1。我希望表格视图滚动到第 3 行。
代码如下。在 viewDidAppear 中,我有相同的代码来获取 lastSavedRow 并调用 scrollToRowAtIndexPath。当应用程序被加载时,滚动工作。但是,在 segmentValueChanged 操作中,它不会滚动到正确的位置。在调试器中,我确定 lastSavedRow 的编号正确。
- (IBAction) segmentVauleChanged : (id)sender
{
// remember row number before segment value changes
NSArray *indexPaths = [self.tableView indexPathsForVisibleRows];
NSArray * sortedIndexPaths = [indexPaths sortedArrayUsingSelector:@selector(compare:)];
NSIndexPath *firstVisibleIndexPath = [sortedIndexPaths objectAtIndex:0];
// function to write row number and seg index to user default
[self saveScrollPositionInSegment: self.currentSegmentSelectedIndex row:firstVisibleIndexPath.row];
self.currentSegmentSelectedIndex = segmentController.selectedSegmentIndex;
[self.tableView reloadData];
// scroll to last saved position
int lastSavedRow = [self getScrollPositionInSegment:segmentController.selectedSegmentIndex];
[self.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:lastSavedRow inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:YES];
}
有人有同样的问题吗?非常感谢!
【问题讨论】:
-
为什么要对 indexPaths 数组进行排序?两个段是否使用相同的 tableview 数据源?
-
你是对的。无需排序。
-
感谢您的提问!不需要排序:-)