我在UITableView单元中有一个水平滚动集合视图,实现了与Netflix相同的视图。
当前,我正在将URL数据加载到包含表视图的视图控制器中,并将数据数组传递到包含collectionView的UITableViewCell中,然后呈现集合视图单元格。
但是我感觉使用这种方法缺乏控制。例如,UI管理,隐藏,根据URL数据加载和错误显示视图等。
我尝试将URL数据加载到表格视图单元格中,并且有效 完全适合我,但我认为这样做不合适,因为 只有控制器才能控制一切。
我用来在控制器中加载数据的闭包是-
private func fetchData() {
let id = UserDefaults.standard.getUserId()
Service.shared.fetch(userId: id) { (data, error) in
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 0.5, execute: {
guard error == nil else {
print(error?.localizedDescription ?? "Error")
return
}
let result = data?.count != 0 ? "Success" : "Failure"
switch result {
case ResultType.Failure.rawValue:
print("Failure")
case ResultType.Success.rawValue:
if let data = data {
self.data = data
}
default: break
}
})
}
}
回到问题,是否可以在其中加载数据 UITableViewCell是为了在该UITableViewCell中隐藏/显示或设置UICollectionView的动画?
此外,假设有一个场景,我必须加载4-5个URL数据并将其呈现在每个可能包含或可能不包含集合视图的自定义表格视图单元格中。
复杂!
答案 0 :(得分:1)
您可以在视图中加载数据,但这不是一个好的架构。它阻碍了可重复使用性并混合了责任。另外,表视图细胞将被重新使用,这将最终导致奇怪的数据加载行为和可能的错误。
我建议将数据加载到自定义类中,然后在视图控制器中使用该类。这样,您的数据加载便与控制器和视图分离,从而提供了最大的灵活性。