UICollectionView显示卸载的xib,不使用swift更新内部内容

时间:2018-12-03 19:44:28

标签: ios swift uicollectionview

我有一个从.xib文件加载的集合视图。当视图打开时,有时收集视图会加载内容,而有时它不会将任何内容加载到单元格中,从而仅显示.xib。其他时候,.xib甚至都不显示。但是,我不明白为什么会这样。单击该单元格时,将打开一个新的viewController并带有详细视图,该视图已加载了内容,因此该单元格显然知道应该显示什么。

var currentUser: User!
var listCategories: [String] = ["Friends Lists", "Friends", "People"]
var lists = [Media]()

viewDidLoad:

collectionView.register(UINib(nibName: "ListCell2.0", bundle: nil), forCellWithReuseIdentifier: Storyboard.listCell)
collectionView.reloadData()
observeMedia()

observeMedia():

func observeMedia() {
    Media.observeNewMedia { (media) in
        if !self.lists.contains(media) {
            self.lists.insert(media, at: 0)
            self.collectionView.reloadData()
        }
    }
}

viewWillAppear:

override func viewWillAppear(_ animated: Bool) {

    observeMedia()

}

collectionView方法:

extension HomeViewController
{

func numberOfSections(in collectionView: UICollectionView) -> Int {
    return listCategories.count
}

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {

    if section == 0 {

        return lists.count

    }else{
        return 0
    }

}

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: Storyboard.listCell, for: indexPath) as! ListCell

    cell.layer.applySketchShadow(color: UIColor.black, alpha: 0.08, x: 0, y: 0, blur: 10, spread: 0)
    cell.layer.cornerRadius = 20
    cell.layer.masksToBounds = false

    cell.currentUser = self.currentUser
    cell.media = self.lists[indexPath.item]

    cell.mainView.setGradientBackground(colours: self.getColourFromTag(tag: self.lists[indexPath.item].tag))

    return cell

}

//section header view
func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView
{
    let sectionHeaderView = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: Storyboard.sectionHeader, for: indexPath) as! SectionHeaderView
    let category = listCategories[indexPath.section]
    sectionHeaderView.sectionTitle = category
    return sectionHeaderView
}

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
    self.performSegue(withIdentifier: Storyboard.showListDetailSegue, sender: nil)
}

CollectionView单元格

import UIKit
import Foundation
import SAMCache

class ListCell: UICollectionViewCell {

@IBOutlet weak var nameView: UIView!
@IBOutlet weak var mainView: UIView!

@IBOutlet weak var nameButton: UIButton!
@IBOutlet weak var profileImageView: UIImageView!
//@IBOutlet weak var tagLabel: UILabel!
@IBOutlet weak var dateLabel: UILabel!
@IBOutlet weak var listTitle: UILabel!
@IBOutlet weak var boughtLabel: UILabel!
@IBOutlet weak var boughtProgress: UIProgressView!

var numOfItems = 0
var numOfBought = 0
var counter: Double = 0{
    didSet{

        boughtProgress.isHidden = false
        let fractionalProgress = Float(counter)
        boughtProgress.setProgress(fractionalProgress, animated: true)

    }
}
var currentUser: User!
var media: Media! {
    didSet{
        if currentUser != nil{
            self.updateUI()
        }
    }
}

var cache = SAMCache.shared()

func updateUI(){

    let profileImageKey = "\(media.createdBy.uid)-profileImage"
    if let image = cache?.object(forKey: profileImageKey) as? UIImage {

        self.profileImageView.image = image

    }else{
        media.createdBy.downloadProfilePicture { [weak self] (image, error) in
            if let image = image {

                self?.profileImageView.image = image
                self?.cache?.setObject(image, forKey: profileImageKey)

            }else if error != nil {

                print(error)
            }
        }
    }


    mainView.layer.cornerRadius = 20
    mainView.layer.masksToBounds = true

    //profile image

    profileImageView.layer.cornerRadius = profileImageView.bounds.height / 2.0
    profileImageView.layer.masksToBounds = true

    //name

    nameButton.setTitle("\(media.createdBy.firstName) \(media.createdBy.lastName)", for: [])
    nameView.layer.cornerRadius = 20
    nameView.layer.masksToBounds = true

    //date

    dateLabel.text = "\(convertDateFormatter(theDate: media.dueAt))"
    dateLabel.backgroundColor = UIColor(red: 1, green: 1, blue: 1, alpha: 0.3)
    dateLabel.textColor = UIColor.white
    dateLabel.layer.cornerRadius = dateLabel.bounds.height / 2.0
    dateLabel.layer.masksToBounds = true

    //title

    listTitle.text = "\(media.title)"

    //progress

    numOfItems = media.items.count
    print("num of items \(media.items.count)")
    counter = Double(numOfBought)/Double(numOfItems)
    boughtLabel.text = "\(numOfBought)/\(numOfItems) Bought"
    boughtProgress.layer.cornerRadius = boughtProgress.bounds.height / 2.0
    boughtProgress.layer.masksToBounds = true

}

@IBAction func arrowDidTap(){

    print("arrow tapped")
    print(media.tag)

}

func convertDateFormatter(theDate: String) -> String
{
    print(theDate)
    let newFormat = DateFormatter()
    newFormat.dateFormat = "dd/MM/yyyy"
    let dueDate = newFormat.date(from: theDate)
    newFormat.dateFormat = "dd MMM yy"
    print(newFormat.string(from: dueDate!))
    return  newFormat.string(from: dueDate!)

}

第一张图片显示了视图首次加载的时间。这就是.xib中显示的内容,但是渐变已加载,而不是内容

collection view not loaded

第二张图片显示了它的外观。这是在浏览视图后

Collection View loaded

0 个答案:

没有答案