滚动UITableViewCell可见并突出显示

时间:2015-07-21 19:25:17

标签: ios swift uitableview swift2 ios9

我目前有以下设置: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)
    }
}

有没有更好的方法可以做到这一点,而不依赖于硬编码时序?

0 个答案:

没有答案