集合视图为空时如何显示消息 [英] How to show a message when collection view is empty
问题描述
我试图仅在我的收藏视图为空时显示一条消息.好吧,当我的if为true时,我尝试设置return 1,但是当我拥有它时,它只会在我的收藏夹视图中显示一项(即使我有更多).当我返回此代码时(下面的代码),它显示了我的收藏夹视图中的所有项目,但是当我尝试删除它时,最后一个不是可删除的",我的意思是,最后一个保留在那里.仅当我的收藏夹视图中没有任何物品时,如何显示此消息?
I`m trying to show a message only when my collection view is empty. Well, I try set return 1 when my if is true but when I have this, it only show one item in my collection view (even if I had more). And when I return this (code bellow) it shows all the items I have in my collection view but when I try to delete it, the last one is not "deletable", I mean, the last one stays there. How can I show this message only if I have no items in my collection view?
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
if self.movies.count > 0 {
self.favCollectionView.backgroundView = nil
return self.movies.count
}
else {
let rect = CGRect(x: 0,
y: 0,
width: self.favCollectionView.bounds.size.width,
height: self.favCollectionView.bounds.size.height)
let noDataLabel: UILabel = UILabel(frame: rect)
noDataLabel.text = "No favorite movies yet."
noDataLabel.textAlignment = .center
noDataLabel.textColor = UIColor.gray
noDataLabel.sizeToFit()
self.favCollectionView.backgroundView = noDataLabel
return 0
}
}
更新
我是这样做的:
Update
I did it like this:
func numberOfSections(in collectionView: UICollectionView) -> Int {
return 2
}
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
if section == 0 { return self.movies.count}
else if section == 1 {
if self.movies.count < 1 { return 1 }
else { return 0 }
}
return 0
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = favCollectionView.dequeueReusableCell(withReuseIdentifier: "FavCollectionCell", for: indexPath) as! FavoritesCollectionViewCell
if indexPath.section == 0 {
let movie = movies[indexPath.row]
let imgStg: String = movie.posterURL!
let imgURL: URL? = URL(string: imgStg)
let imgSrc = ImageResource(downloadURL: imgURL!, cacheKey: imgStg)
cell.favTitleLabel.text = movie.title
cell.favPosterImageView.layer.cornerRadius = cell.favPosterImageView.frame.size.width/2
cell.favPosterImageView.clipsToBounds = true
//image cache with KingFisher
cell.favPosterImageView.kf.setImage(with: imgSrc)
return cell
}
else {
let rect = CGRect(x: 0, y: 0, width: self.favCollectionView.frame.width, height: self.favCollectionView.frame.height)
let noDataLabel: UILabel = UILabel(frame: rect)
noDataLabel.text = "No favorite movies yet."
noDataLabel.textAlignment = .center
noDataLabel.textColor = UIColor.gray
noDataLabel.sizeToFit()
let cell = UICollectionViewCell()
cell.contentView.addSubview(noDataLabel)
return cell
}
}
对于@Lamar的解决方案,但该应用程序因错误而崩溃:
For @Lamar's solution, but the app crashed with error:
推荐答案
我在扩展名中使用backgroundView
:
extension UICollectionView {
func setEmptyMessage(_ message: String) {
let messageLabel = UILabel(frame: CGRect(x: 0, y: 0, width: self.bounds.size.width, height: self.bounds.size.height))
messageLabel.text = message
messageLabel.textColor = .black
messageLabel.numberOfLines = 0;
messageLabel.textAlignment = .center;
messageLabel.font = UIFont(name: "TrebuchetMS", size: 15)
messageLabel.sizeToFit()
self.backgroundView = messageLabel;
}
func restore() {
self.backgroundView = nil
}
}
我就这样使用它:
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
if (self.movies.count == 0) {
self.collectionView.setEmptyMessage("Nothing to show :(")
} else {
self.collectionView.restore()
}
return self.movies.count
}
这篇关于集合视图为空时如何显示消息的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!