【问题标题】:How to Iterate through all UITableView sections?如何遍历所有 UITableView 部分?
【发布时间】:2018-02-14 12:45:53
【问题描述】:

我正在尝试转换具有多个部分和动态行的 UITableView。

我目前正在尝试遍历 UITableView 的所有子视图。我正在尝试将每个子视图插入到一个容器 UIView 中,我可以将它们全部组合起来以组成一个 UIView 代表特定高度限制的一个页面,我可以在其中动态添加页脚。

基本上,目标是遍历所有部分,并将每个单元格的所有视图组合成一个大 UIView,代表该部分,包括部分标题。

这样我以后可以轻松地将每个 UIView 转换为特定的 PDF 页面。好像我只是直接将 UITableView 转换为 PDF 一样,我会在我不想要的地方切页。

【问题讨论】:

  • 很不清楚,你这样做的目标是什么
  • 这是我目前拥有的一个场景。我有这个有多个部分的表格视图。我想将这些部分分成不同的 UIView,我们称之为页面,这意味着每个单独的页面将包含特定部分的所有行。
  • 我能不能给你看客观的c代码,因为我的swift不好
  • @JRB 我不介意。 :) 请给我看。
  • 这可能会有所帮助stackoverflow.com/a/41313008/4601900

标签: swift uitableview uigraphicscontext uitableviewautomaticdimension


【解决方案1】:

我能够通过下面的代码遍历所有 UITableView 部分和行:

这里的逻辑是,为了能够获得我附加到 cell.contentView 的正确子视图,我在将它们添加为子视图之前为它们设置了一个标签,这样我就能够获得我添加的确切视图,而不是包装 contentView。

var subviews = [UIView]()
let sectionCount = tableView.numberOfSections

/// loop through available sections
for section in 0..<sectionCount {

    /// get each section headers
    if let sectionHeader = self.tableView(tableView, viewForHeaderInSection: section) {
        subviews.append(sectionHeader)
    }


    if tableView.numberOfRows(inSection: section) > 0 {
        /// loop through rows within section
        for row in 0..<tableView.numberOfRows(inSection: section) {
            let indexPath = IndexPath(row: row, section: section)
            tableView.scrollToRow(at: indexPath, at: .top, animated: false)
            if let currentCell = tableView.cellForRow(at: indexPath), let view = currentCell.contentView.viewWithTag(999) {
                subviews.append(view)
            }
        }
    }
}

【讨论】:

    【解决方案2】:

    视图应该代表您的模型。必须访问视图才能知道控制器应该如何呈现视图在概念上似乎是错误的。

    视图是模型的表示,因此视图不是它们如何表示/构建的真实来源。 也许您应该考虑制作一些实用函数来了解应该呈现什么视图,而不是遍历视图/单元格以了解是否要对它们进行分组(对它们做任何您想做的事情)。

    一旦模型更新,就可以调用该实用函数(可以在服务调用的回调中,或者如果您使用诸如 MVVM 之类的模式,则可以在 NSFetchDelegate 中)。

    您的控制器会收到更改警报,然后相应地更新视图/tableView/部分(您真正想要的任何内容)。

    无论您使用什么设计模式(MVC、MVP 等),这都适用

    【讨论】:

      猜你喜欢
      • 2012-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-20
      • 2012-08-08
      • 2018-01-02
      相关资源
      最近更新 更多