【问题标题】:UITableView move to cellUITableView 移动到单元格
【发布时间】:2012-04-22 16:06:00
【问题描述】:

我想做下一个:

我有一个 UITableView 必须显示单词 (A-Z)。

当前,当视图加载时,我显示了一个单元格(这是正确的)。第一个单元格显示我的数组单词中的第一个单词。

目的: 我想移动到必须从我的数组中显示 10 个单词的单元格,但问题是 indexPath.row = 10 的单元格不存在(这是正确的,因为我还没有滚动)。

什么是从 1 到 10 单元转换的正确等待。

我认为如果我不使用 dequeueReusableCellWithIdentifier 创建我的单元,我可以这样做并解决我的问题,但我的意思是设备内存的这个问题。

也就是说我需要scrollToRowAtIndexPath

谢谢!

【问题讨论】:

    标签: ios uitableview


    【解决方案1】:

    您对scrollToRowAtIndexPath 方法的识别是正确的。所以你需要做的就是用你想要移动到的行创建一个新的 IndexPath,例如 row index = 10:

    [tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:10 inSection:indexPath.section] 
                 atScrollPosition:UITableViewScrollPositionMiddle animated:NO];
    

    【讨论】:

    • 感谢您的回复,但是如何在尚不存在的 indexPath 处滚动?
    • 我现在想知道我是否理解你原来的问题。据我了解,您的表格可能有很多单元格,例如 100 个,但一次只能看到大约 10 个。尽管从技术上讲,内存中没有 100 个实际行(由于单元重用),但以编程方式滚动到尚不可见的行仍然没问题。例如,第 50 行。
    • 再次感谢。现在我已经解决了这个问题,但是带有动画 NO 的 scrollToRowAtIndexPath 还不起作用。因此,如果动画是的,一切都很好。
    • 方法应该放在哪里?
    • @arooaroo 在以下情况下我该怎么办。 *.com/questions/21041318/…
    【解决方案2】:
    //For iOS 7 
    [self.TableView reloadData];
    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:1 inSection:1];
    [TableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionTop animated:YES];
    

    【讨论】:

      【解决方案3】:

      可以识别需要使其可见的行(例如下面的 forRow)并重新加载该行。完成后,可以滚动到该行。

      let moveToIndexPath = NSIndexPath(forRow: forRow, inSection: 0)
      self.tableView.reloadRowsAtIndexPaths([moveToIndexPath], withRowAnimation: .None)
      self.tableView.scrollToRowAtIndexPath(moveToIndexPath, atScrollPosition: atScrollPosition, animated: true)
      

      【讨论】: