我目前有以下设置:UITableView
引导(当用户选择一个单元格时)到UIPageViewController
,因此用户可以滚动UITableView
中显示的相同项目回到并选择另一个项目。
当用户回去时,我想滚动到UIPageViewController
中最后查看的项目并突出显示它,以便用户更清楚他在哪里。
使用tableView:scrollToRowAtIndexPath:atScrollPosition:animated:
我可以滚动到上次查看的单元格,使用tableView:selectRowAtIndexPath:animated:scrollPosition:
和tableView:deselectRowAtIndexPath:animated
,我可以突出显示该单元格。但我还没有找到一个好的,干净的方法来同时做两件事,也就是说,首先滚动然后突出显示单元格。
这是我当前的工作,但是hacky解决方案,可能会崩溃:
if let visible = tableView.indexPathsForVisibleRows {
if !visible.contains(indexPath) {
// cell is not visible, scroll required
tableView.scrollToRowAtIndexPath(indexPath, atScrollPosition: .Middle, animated: true)
// highlight the cell after 0.4 seconds (aka somewhat after the scroll animation)
let delayTime = dispatch_time(DISPATCH_TIME_NOW, Int64(0.4 * Double(NSEC_PER_SEC)))
dispatch_after(delayTime, dispatch_get_main_queue()) {
self.tableView.selectRowAtIndexPath(indexPath, animated: true, scrollPosition: .None)
self.tableView.deselectRowAtIndexPath(indexPath, animated: true)
}
} else {
// no need to scroll, just highlight
tableView.selectRowAtIndexPath(indexPath, animated: true, scrollPosition: .None)
tableView.deselectRowAtIndexPath(indexPath, animated: true)
}
}
有没有更好的方法可以做到这一点,而不依赖于硬编码时序?