UICollectionView 中的 Nib Cell 注册不显示
Posted
技术标签:
【中文标题】UICollectionView 中的 Nib Cell 注册不显示【英文标题】:Nib Cell registration in UICollectionView does not show 【发布时间】:2020-03-03 05:52:08 【问题描述】:我正在尝试在我的 collectionView
中注册一个 nib
单元格,但它不会显示。
这是我的MenuCardVC
import UIKit
class MenuCardVC: UIViewController
@IBOutlet weak var collectionView: UICollectionView!
var drinksMenu = [Drink]()
var venueId: String?
//Selected venue
var venue: Venue?
didSet
loadDrinksMenu()
override func viewDidLoad()
super.viewDidLoad()
self.collectionView.delegate = self
self.collectionView.dataSource = self
let nib = UINib(nibName: "DrinkMenuCell", bundle: nil)
self.collectionView.register(nib, forCellWithReuseIdentifier: "DrinkMenuCell")
//end viewDidLoad
func loadDrinksMenu()
Utilities.run.showSVHUDWithStatus(uiView: self.view, status: "Loading menu")
getJWTfromGoogleCloudFunction()
//end func
func getJWTfromGoogleCloudFunction()
DoshiiServices.shared.getJWTfromGoogleCloudFunction (token) in
self.drinksMenu.removeAll()
DoshiiServices.shared.getMenu(token: token, locationId: "xxxxxxx") (bool, drinksMenu) in
self.drinksMenu = drinksMenu
Utilities.run.dismissSVHUD(delay: 0.2)
//end getMenu
//getJWTfromGoogleCloudFunction
//end func
//end class
extension MenuCardVC: UICollectionViewDelegate, UICollectionViewDataSource
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int
return drinksMenu.count
//end func
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "DrinkMenuCell", for: indexPath) as! DrinkMenuCell
cell.configureCell(item: "BEER") //<---testing
return cell
//end func
//end extension
这是我的DrinkMenuCell
class DrinkMenuCell: UICollectionViewCell
@IBOutlet weak var label: UILabel!
override func awakeFromNib()
super.awakeFromNib()
func configureCell(item: String)
self.label.text = item
//end func
我已经正确设置了我的单元格标识符
【问题讨论】:
您应该在设置drinksMenu
(在getMenu
块中)之后调用collectionView.reloadData()
当然,数组初始化时什么都没有,所以在重新加载之前什么都不会显示。就是这样! :) - 认为这可能很简单。谢谢!
【参考方案1】:
您应该在设置drinksMenu
(在getMenu
块中)之后调用collectionView.reloadData()
func getJWTfromGoogleCloudFunction()
DoshiiServices.shared.getJWTfromGoogleCloudFunction (token) in
self.drinksMenu.removeAll()
DoshiiServices.shared.getMenu(token: token, locationId: "xxxxxxx") (bool, drinksMenu) in
self.drinksMenu = drinksMenu
Utilities.run.dismissSVHUD(delay: 0.2)
// Add here!
self.collectionView.reloadData()
//end getMenu
//getJWTfromGoogleCloudFunction
//end func
【讨论】:
【参考方案2】:从服务器获取数据后调用collectionView.reloadData()
。
在本节中您需要添加
DoshiiServices.shared.getMenu(token: token, locationId: "xxxxxxx") (bool, drinksMenu) in
self.drinksMenu = drinksMenu
Utilities.run.dismissSVHUD(delay: 0.2)
self.collectionView.reloadData()
【讨论】:
【参考方案3】:在drinksMenu
的didSet
观察者中对collectionView
调用reloadData()
,即
var drinksMenu = [Drink]()
didSet
self.collectionView.reloadData()
【讨论】:
以上是关于UICollectionView 中的 Nib Cell 注册不显示的主要内容,如果未能解决你的问题,请参考以下文章
UIView Nib 内的 UICollectionView
IOS UICollectionView 为 UICollectionViewCell 注册 nib 不起作用
UICollectionView,来自注册为单元格的框架目标的 nib 在运行时失败
iOS UICollectionView 动态切换单元格NIB