为啥第一次滚动到另一个 UITableView 中的 UICollectionView 中的 UITableView 不加载数据?
Posted
技术标签:
【中文标题】为啥第一次滚动到另一个 UITableView 中的 UICollectionView 中的 UITableView 不加载数据?【英文标题】:Why does my UITableView within a UICollectionView within another UITableView doesn't load data when scrolled to it for the first time?为什么第一次滚动到另一个 UITableView 中的 UICollectionView 中的 UITableView 不加载数据? 【发布时间】:2019-04-10 02:37:35 【问题描述】:我有一个UITableView
,其中一个单元格包含一个UICollectionView
。然后,UICollectionView
的每个单元格还包含一个UITableView
。为了更清楚地说明这一点:
我第一次滚动到这个单元格时,没有加载任何内容,单元格的高度只是 0。当我继续滚动外部 UITableView 直到这个特定的单元格离开屏幕(被破坏)并回到那里时,然后加载数据。这是一个简化的代码sn-p:
class ViewController: UIViewController
@IBOutlet weak var outerTableView: UITableView!
func tableView(..., cellForRowAt indexPath: IndexPath) -> UITableViewCell
if indexPath.row == ...
// return regularCells
let cellThatHasCollectionView: CustomTableViewCell = ...
cellThatHasCollectionView.sectionData = ... // An array of array
return cellThatHasCollectionView
特殊的UITableViewCell
定义如下:
private class CustomTableViewCell: UITableViewCell
private let someCollectionView: UICollectionView = ...
public var sectionData: [[SomeType]] = []
init(...)
...
someCollectionView.delegate = self
someCollectionView.dataSource = self
func collectionView(..., numberOfItemsInSection section: Int) -> Int
return sectionData.count
func collectionView(..., cellForItemAt indexPath: IndexPath) -> ...
let cell: CustomCollectionViewCell = ...
cell.items = sectionData[indexPath.row]
return cell
最后,我将这个内部UITableView
定义如下:
private class CustomCollectionViewCell: UICollectionViewCell
public var items: [SomeType] = []
private let innerTableView: UITableView = ...
init(...)
...
innerTableView.delegate = self
innerTableView.dataSource = self
func tableView(..., numberOfItemsInSection section) -> Int
return items.count
...
我应该如何解决这个问题? :)
【问题讨论】:
【参考方案1】:public var sectionData: [[SomeType]] = []
didSet
someCollectionView.reloadData()
public var items: [SomeType] = []
didSet
innerTableView.reloadData()
您应该创建一个标志变量来控制someCollectionView
和innerTableView
,它们只是在您设置sectionData
和items
时第一次加载
【讨论】:
不幸的是,它没有用 :( 我在代码中创建了一些断点,例如cellForRowAt
和 cellForItemAt
,第一次滚动到该单元格时,都没有调用出于某种原因。但感谢您的帮助!以上是关于为啥第一次滚动到另一个 UITableView 中的 UICollectionView 中的 UITableView 不加载数据?的主要内容,如果未能解决你的问题,请参考以下文章
我的 UITableView 不会向下滚动到数据的末尾!为啥?