在单元格创建/出队期间在tableViewCell文件中获取tableView的indexPath

时间:2019-05-29 02:46:49

标签: ios swift xcode uitableview uicollectionview

我正在创建一个包含每月日历的可滚动视图。我正在使用集合视图在充满日历的表视图中显示日历。因此,每个表格视图单元格都是特定月份的日历,每个集合视图单元格都是一天。我从视图控制器为tableview单元有一个单独的swift文件。由于每个表格单元格的外观都会有所不同(因为月份不同),因此表格单元格需要知道在dequeque单元格函数中创建表格时将其放置在表格视图中的哪一行。

tableView.dequeueReusableCell(withIdentifier: "CalendarTableViewCell", for: indexPath)

我需要在表格单元格文件内的“ for:indexPath”参数中获取indexPath,因为当表格单元格出队时,表格单元格内的collectionview会被创建。集合视图的内容取决于它在哪个表视图行中。那么如何获取该参数?

很抱歉为您解释过多,请尽可能提供帮助。谢谢!

1 个答案:

答案 0 :(得分:0)

在UITableViewCell子类中创建一个数组,然后在集合视图数据源方法中使用该数组。

class MonthCell: UITableViewCell, UICollectionViewDelegate, UICollectionViewDataSource {
    let collectionView = UICollectionView(frame: .zero, collectionViewLayout: UICollectionViewFlowLayout())
    let datesArray = [String]()
    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return datesArray.count
    }
}

tableView cellForRowAt方法中分配日期值并重新加载collectionView

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "CustomCell") as! MonthCell
    cell.datesArray = []//dates based on indexPath
    cell.collectionView.reloadData()
    return cell
}

tableView cellForRowAt方法中分配对表格视图单元格索引路径的引用

class MonthCell: UITableViewCell, UICollectionViewDelegate, UICollectionViewDataSource {
    let collectionView = UICollectionView(frame: .zero, collectionViewLayout: UICollectionViewFlowLayout())
    var tableIndexPath:IndexPath?
    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        if let tableIndexPath {
            // return value based on tableIndexPath
        } else {
            return 0
        }
    }
}

// cellForRowAt

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "MonthCell") as! MonthCell
    cell.tableIndexPath = indexPath
    cell.collectionView.reloadData()
    return cell
}