我在UITableView单元格中有一个水平滚动的集合视图,实现了与Netflix相同的视图。
目前,我正在视图控制器中加载包含表视图的URL数据,并在包含集合视图的UITableViewCell中传递数据数组,然后呈现集合视图单元格。
但我觉得用这种方法控制不了。例如,用户界面管理、隐藏、根据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数据,并在每个自定义表视图单元格中呈现它们,这些单元格可能包含也可能不包含集合视图。
很复杂!
最佳答案
可以在视图中加载数据,但这不是一个好的体系结构。它妨碍了可重用性,并混淆了责任。此外,表视图单元将被重用,这将最终导致奇怪的数据加载行为,并可能导致错误。
我建议将数据加载到自定义类中,并在视图控制器中使用该类。这样,您的数据加载就脱离了控制器和视图,提供了最大的灵活性。