如何遍历所有 UITableView 部分?

How to Iterate through all UITableView sections?

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

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

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

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

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

视图是您模型的表示,因此视图不是它们真实情况的来源represented/built。 也许你应该考虑制作一些实用函数来知道应该呈现什么视图,而不是遍历 views/cells 来知道你是否想对它们进行分组(对它们做任何你想做的事)。

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

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

无论您使用何种设计模式(MVC、MVP 等...),这都适用

我能够遍历所有 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)
            }
        }
    }
}