如何仅在 swift 中重新加载 tableViewCell?

Posted

技术标签:

【中文标题】如何仅在 swift 中重新加载 tableViewCell?【英文标题】:How to reload tableViewCell only in swift? 【发布时间】:2017-04-23 06:12:38 【问题描述】:

有什么方法可以只重新加载 tableViewCell 但不让它重新加载 tableView 部分标题 View ?当我切换 UITableViewCell 我想更新数据重新加载更改

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 

        switch self[selectedIndex] 

        case .tracks:

        let cell = tableView.dequeueReusableCell(withIdentifier: cellId, for: indexPath) as! TracksCell
         return cell

        case .playlists:

          let cell = tableView.dequeueReusableCell(withIdentifier: cellPlayListId, for: indexPath) as! PlaylistCell

        return cell

        

我想做的只是重新加载 UITableViewCell 我不想在下面重新加载这段代码

 override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView?  

如果我使用 tableView.reload() 它会影响我在 viewForHeaderInSection 中的样式因为我添加了 UIViewScroll

感谢您的帮助!

【问题讨论】:

【参考方案1】:

如果您只想重新加载特定的 tableView 单元格,请使用:

tableView.reloadRows(at: [IndexPath(row: rowNumber, section: 0)], with: .automatic)

它只重新加载单元格而不是部分。

【讨论】:

什么是 rowNumber ? @Kristoff 声明是 func reloadRows(at indexPaths: [IndexPath], with animation: UITableViewRowAnimation),其中 indexPath 是标识要重新加载的行的 NSIndexPath 对象数组。 @Kristof rowNumber 表示您要重新加载的单元格数量。如果你想重新加载 2 号单元格,那么你可以这样写。 tableView.reloadRows(at: [IndexPath(row: 2, section: 0)], with: .automatic) rowNumber 本质上是foo_rowNumber【参考方案2】:

重新加载特定的UITableViewCell

tableviewCart.reloadRows(at: [indexPath!], with: .none)

【讨论】:

如果你想重新加载表格视图单元格【参考方案3】:

寻找重新加载视图的表视图委托方法。它们是:

open func reloadSections(_ sections: IndexSet, with animation: UITableView.RowAnimation)

open func reloadRows(at indexPaths: [IndexPath], with animation: UITableView.RowAnimation)

open func reloadData()

在您的情况下,reloadRows 将是最合适的选择,因为:

tableView.reloadRows(at: <[IndexPath]>, with: .automatic) 

其中,&lt;[IndexPath]&gt; 是单元格的索引路径数组。例如:

let cell0FromSection0 = IndexPath(row: 0, section: 0)
let cell2FromSection0 = IndexPath(row: 2, section: 0)
let cell1FromSection1 = IndexPath(row: 1, section: 1)

tableView.reloadRows(at: [cell0FromSection0, cell2FromSection0, cell1FromSection1], with: .automatic)

【讨论】:

【参考方案4】:

您可以使用以下代码重新加载UITableView 中的特定单元格。

let cellNmber = IndexPath(row: rowNumber, section: sectionNummber)
tableView.reloadRows(at: [cellNmber], with: .automatic)

tableView.reloadRows(at: [cellNmber], with: .none)

如果您想使用默认动画重新加载单元格,请使用.automatic。 如果您想在没有动画的情况下重新加载单元格,请使用.none。 您还可以通过提供 IndexPath 数组重新加载 tableView 中的多个单元格。 例如

tableView.reloadRows(at: [cellNmber1,cellNmber3,cellNmber5], with: .automatic)

【讨论】:

以上是关于如何仅在 swift 中重新加载 tableViewCell?的主要内容,如果未能解决你的问题,请参考以下文章

扩展或不扩展时仅重新加载表格视图的一部分 - Swift

如何仅在 Angular 的某些页面上显示标题组件(现在它仅在重新加载时显示)

如何重新加载 UIPageViewController 以在 Swift 中重新加载其视图

加载动画仅在按钮功能后显示(Swift)

如何重新加载UIPageViewController以在Swift中重新加载其视图

如何在 swift 中重新加载 UICollectionReusableView 中的集合视图