我正在尝试创建一个具有两个集合视图的应用程序。我想首先填充第一个集合视图,然后填充第二个集合视图。首先,我将self
的委托设置为photoCollectionView.reloadData()
。然后,我通过调用photoCollectionView.reloadData()
来填充集合视图。但是,我希望photoCollectionView.dataSource = self
photoCollectionView.reloadData() // I want this code to complete before executing anything else under it.
media.removeAll()
let assetVideo = PHAsset.fetchAssets(with: PHAssetMediaType.video , options: nil)
assetVideo.enumerateObjects({ (object, count, stop) in
self.media.append(object)
})
self.media.reverse()
videoControllerView.dataSource = self
videoControllerView.reloadData()
在执行任何进一步的代码之前首先完成,因为当我在其下面包含代码时,我最初尝试填充的集合视图不会填充。但是,当我删除代码时,它确实填充。我尝试使用DispatchQueue,但我没有运气。
photoCollectionView.dataSource = self
photoCollectionView.reloadData()
DispatchQueue.main.async {
self.media.removeAll()
let assetVideo = PHAsset.fetchAssets(with: PHAssetMediaType.video , options: nil)
assetVideo.enumerateObjects({ (object, count, stop) in
self.media.append(object)
})
self.media.reverse()
self.videoControllerView.dataSource = self
self.videoControllerView.reloadData()
}
添加DispatchQueue后的代码。执行此代码时,不会填充集合视图。但是,如果我们注释掉DispatchQueue中的所有代码,它就会填充。
<div class="col-lg-8 col-md-8 col-sm-8">
<ul class="nav nav-tabs">
<li class="active"><a data-toggle="tab" href="tab1">Tab1 Heading</a><li>
<li><a data-toggle="tab" href="tab2">Tab2 Heading</a><li>
</ul>
<div class="tab-content">
<div id="tab1" class="tab-pane active in">
<h3>content for tab1</h3>
</div>
</div id="tab2" class="tab-pane fade">
<h3>content for tab2</h3>
</div>
</div>
</div>
<button type="submit" class="btn btn-primary" (click)="switchtab()"> Tab selection</button>
感谢任何帮助。谢谢!
答案 0 :(得分:0)
reloadData
没有完成处理程序,但通过将调用放入CATransaction
块来实现相同的效果相对容易。
CATransaction.begin()
CATransaction.setCompletionBlock {
// this runs after reloadData is done
}
photoCollectionView.reloadData()
CATransaction.commit()