1

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

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

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

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

4

2 回答 2

2

我能够通过下面的代码遍历所有 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)
            }
        }
    }
}
于 2018-03-23T01:44:19.323 回答
0

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

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

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

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

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

于 2018-02-14T18:19:53.337 回答