我似乎无法使我的自定义collectionView Cell可见。我知道CollectionView显示,因为我更改了属性检查器上的背景颜色,但自定义单元格没有显示。我在属性检查器中设置了约束,并在图像下面有一个水平堆栈视图。
我完全遵循了Udemy课程的指示,但它似乎并不起作用。这就是我配置单元格的方式:
代码如下:
Client
以下是ProductCell实现:
import UIKit
class ListVC: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource {
@IBOutlet weak var productsCollection: UICollectionView!
private(set) public var products = [Product]()
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
productsCollection.dataSource = self
productsCollection.delegate = self
}
func initProducts(Product: Product) {
products = DataService.instance.getGroceryOptions()
}
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return products.count
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
if let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "ProductCell", for: indexPath) as? ProductCell {
let product = products[indexPath.row]
cell.updateViews(product: product)
return cell
}
return ProductCell()
}
}
以下是DataService实现:
class ProductCell: UICollectionViewCell {
@IBOutlet weak var itemImage: UIImageView!
@IBOutlet weak var productName: UILabel!
@IBOutlet weak var productPrice: UILabel!
@IBOutlet weak var calCount: UILabel!
func updateViews(product: Product){
itemImage.image = UIImage(named: product.imageName)
productName.text = product.title
calCount.text = product.cal
productPrice.text = product.price
}
}
以下是产品实施:
class DataService {
static let instance = DataService()
private let item = [
Product(title: "Eggs", price: "4.94", imageName: "eggs.jpeg", cal: "340"),
]
private let Groceries = [Product]()
func getGroceryOptions() -> [Product] {
return Products
}
}
答案 0 :(得分:1)
1)您的initProducts
方法不会在代码中的任何位置调用。
2)更新数据源后,您必须致电collectionView.reloadData()
。这意味着,您必须在更新products
属性后调用此方法。
3)另外,正如其他人提到的答案所示,您的getGroceryOptions()
方法实际应该返回items
而不是Products
(那是什么,顺便说一下?)
答案 1 :(得分:0)
未调用initProducts
方法。由于此products
数组保持为空,您在集合中看不到任何单元格。
您应该致电initProducts
(例如在viewDidLoad
中)填充products
数组,其中包含将在您的收藏中显示的元素。
另请考虑从此功能中删除参数(您在此方法中不使用参数,因此您不需要此参数)。它应该看起来像:
func initProducts() {
products = DataService.instance.getGroceryOptions()
}
另外,您应该更正getGroceryOptions
方法。如评论中所指出的,它应该返回item
。
答案 2 :(得分:0)
你有numberOfSectionsInCollectionView
部分超越其他collectionView
功能吗?
看一下这个例子:
func numberOfSectionsInCollectionView(collectionView:UICollectionView) -> Int {
return 1
}