我正在启动一个新的项目,它的集合视图将从REST api下载大量数据。我已经将collection视图和数据源分割成两个文件,但是当我运行应用程序时,得到的只是一个黑屏。我看到了一些问题并尝试更改背景,将集合视图添加为子视图,但似乎没有任何效果。我没有遇到任何错误,调试视图层次结构和视图被列为UIWindoW->MainSearchVC->UICollectionView(从后到前)。
我原本以为没有单元格被填充,但应该是因为我在单元格中设置了UIImage。我不知道还能在哪里找到这个。我的代码如下-如果有人有从其数据源中分离集合视图的经验,或者为什么事情不起作用,请帮助:)
class AppDelegate: UIResponder, UIApplicationDelegate {
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
window = UIWindow(frame: UIScreen.main.bounds)
window?.makeKeyAndVisible()
window?.rootViewController = MainSearchVC()
return true
}
}
class MainSearchVC: UICollectionViewController {
init(){
super.init(collectionViewLayout: UICollectionViewFlowLayout())
self.collectionView = UICollectionView(frame: self.view.frame, collectionViewLayout: UICollectionViewFlowLayout())
self.collectionView?.dataSource = MainSearchDataSource()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
collectionView?.register(ImageCell.self, forCellWithReuseIdentifier: "imagecell")
}
override func viewDidLoad() {
super.viewDidLoad()
self.collectionView?.backgroundColor = UIColor.clear
self.collectionView?.tintColor = UIColor.blue
NSLog("Visible Cells: " + String(describing: self.collectionView?.visibleCells.count))
self.view.addSubview(self.collectionView!)
}
}
class MainSearchDataSource: NSObject, UICollectionViewDataSource {
func numberOfSections(in collectionView: UICollectionView) -> Int {
return 1;
}
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return 10
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "imagecell", for: indexPath)
cell.backgroundColor = UIColor.red
return cell
}
}
class ImageCell: UICollectionViewCell {
override init(frame: CGRect) {
super.init(frame: frame)
setupViews()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
let imageView: UIImageView = {
let iv = UIImageView()
iv.image = UIImage(contentsOfFile: "SR71")
iv.contentMode = .scaleAspectFill
return iv
}()
func setupViews(){
addSubview(imageView)
imageView.frame = CGRect(x: 0, y: 0, width: frame.width, height: frame.width)
}
}
最佳答案
您的MainSearchVC
集合视图dataSource
委托有问题
首先你应该了解Zeroing Weak Reference
dataSource
代表正在维护对您的weak
的Object
引用。你的陈述是MainSearchDataSource
只是分配和分配。它不会保留数据源对象。
您必须创建一个self.collectionView?.dataSource = MainSearchDataSource()
并分配class variable
对象。它将保持对象引用,直到从内存中取消分配。
class MainSearchVC: UICollectionViewController {
var searchDataSource: MainSearchDataSource?
init(){
super.init(collectionViewLayout: UICollectionViewFlowLayout())
self.collectionView = UICollectionView(frame: self.view.frame, collectionViewLayout: UICollectionViewFlowLayout())
searchDataSource = MainSearchDataSource()
self.collectionView?.dataSource = searchDataSource
}
// Remaining code of your `MainSearchVC`
}
关于ios - 拆分的UICollectionView和UICollectionViewDataSource显示黑屏,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45267535/