如何遍历所有UITableView部分?

时间:2018-02-14 12:45:54

标签: swift uitableview uigraphicscontext uitableviewautomaticdimension

我正在尝试使用多个部分和动态行转换UITableView。

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

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

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

2 个答案:

答案 0 :(得分:2)

我能够遍历所有UITableView部分,并通过以下代码进行排序:

这里的逻辑是,为了能够获得我附加到cell.contentView的正确子视图,我在将它们添加为Subview之前设置了它们,这样我就可以获得我添加的确切视图而不是包装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)
            }
        }
    }
}

答案 1 :(得分:0)

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

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

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

您的控制器会被更改提醒,然后相应地更新视图/ tableView / sections(您真正想要的任何内容)。

无论您使用何种设计模式(MVC,MVP等)

,这都适用