tableview 单元格内的集合视图重新加载数据
Posted
技术标签:
【中文标题】tableview 单元格内的集合视图重新加载数据【英文标题】:collection view inside tableview cell reload data 【发布时间】:2015-06-06 00:22:26 【问题描述】:我在 UITableViewCell 中有一个 UICollectionView,并且正在从后台线程上的解析中检索集合视图的图像。我遇到的麻烦是我无法调用集合视图 reloadData 因为我无法设置 UICollectionView 的属性,因为它位于表格视图单元格内。关于如何在之后重新加载集合视图的数据的任何想法后台线程执行完查询了吗?
【问题讨论】:
【参考方案1】:子类 UITableViewCell 并添加方法和对其集合视图的引用。在那里处理您的电话。我假设您将集合视图设置为表视图控制器上的属性
例如
CollectionViewTableCell.h:
@interface CollectionViewTableCell : UITableViewCell
@end
CollectionViewTableCell.m:
@interface CollectionViewTableCell ()
@property (nonatomic, weak) @IBOutlet UICollectionView* collectionView;
@end
@implementation CollectionViewTableCell
-(void) awakeFromNib
[self loadData];
-(void) loadData
// load parse data asynchronously and then call reloadData on your collection view
// make sure to implement delegate/datasource methods for your collection view
@end
注意,有一些方法可以将图像 url 发送到 UIImageView,图像将从 url 异步加载(例如,AFNetworking 有一个支持此的类别)。
【讨论】:
【参考方案2】:确实很简单(假设您的 viewController、tabbleViewCell 和 CollectionViewCell 工作正常),在您声明表格视图的控制器中使用此代码:
对于 Swift 4
// 在您需要重新加载 collectionViewCell 的任何时候在您的 ViewController 中:
var myRow = 0 // include the index path row of your table view cell
var mySection = 0 // and the index path section
DispatchQueue.main.async(execute:
if let index = IndexPath(row: myRow, section: mySection) as? IndexPath
if let cell = self.MyTableView.dequeueReusableCell(withIdentifier: "cell", for: index) as? TableViewCell
cell.collectionReloadData(section: mySection)
)
现在在您的 TableViewCell 中
class TableViewCell: UITableViewCell, UICollectionViewDelegate, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout
@IBOutlet weak var collectionView: UICollectionView!
func collectionReloadData()
DispatchQueue.main.async(execute:
self.collectionView.reloadData()
)
在这里,我让您举个例子来说明它的外观
【讨论】:
以上是关于tableview 单元格内的集合视图重新加载数据的主要内容,如果未能解决你的问题,请参考以下文章
在表格视图中的所有单元格都已加载后,重新加载表格视图单元格内的集合视图
快速单击其中一个 tableview 单元格内的按钮后重新加载 tableview