【问题标题】:ios(Swift) collectionView don't show upios(Swift)collectionView不显示
【发布时间】:2021-10-13 07:39:25
【问题描述】:

我想使用 A ViewController 的按钮在 B ViewController 中显示 CollectionView。图片。 图像中的信息在 json 文件中。 获取信息并调用 Asset 文件中的图像。 获取json中的数据没有问题。 但什么也没有出现。使用 A ViewController 中的按钮, 有什么问题? 底部是我的代码。 谢谢。

一个视图控制器

 //MARK: 4. @objc Button Action
    @objc func topHand(){
        let cham = ChampViewViewController()
        cham.modalPresentationStyle = .fullScreen
        present(cham, animated: true, completion: nil)
    }

B 视图控制器

class ChampViewViewController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource{

    var nameArrayCount = 0
    var nameArray = [String]()
    private var collectionView : UICollectionView?
    
    override func viewDidLoad() {
        super.viewDidLoad()
        let indenti = "top"
        let layout = UICollectionViewLayout()
        getJson(line: indenti)
        collectionView = UICollectionView(frame: .zero,collectionViewLayout: layout)
        collectionView?.delegate = self
        collectionView?.dataSource = self
        collectionView?.register(ChamCellCollectionViewCell.self, forCellWithReuseIdentifier: ChamCellCollectionViewCell.identifier)
        guard let collectionsView = collectionView else { return }
        view.addSubview(collectionsView)
        collectionsView.frame = view.bounds
        
    }
    private func getJson(line:String){
        let cellUrl = Bundle.main.url(forResource: line, withExtension: "json")
        let cellData = NSData(contentsOf: cellUrl!)
        do {
            let modelJson = try JSONSerialization.jsonObject(with: cellData! as Data, options: .allowFragments ) as! NSArray
            var models : [Model] = []
            modelJson.forEach { json in
                guard let dic = json as? [String : AnyObject] else {
                    return
                }
                let newModel = Model(name: dic["이름"] as! String,
                                     line: dic["주라인"] as! String, type:
                                        dic["성향"] as! String,
                                     hp: dic["체력"] as! Int,
                                     hpRe: dic["추가체력"] as! Int,
                                     attackPower: dic["공격력"] as! Double,
                                     attackPowerRe: dic["추가공격력"] as! Double,
                                     attackSpeed: dic["공속"] as! Double,
                                     attackSpeedRe: dic["추가공속"] as! Double,
                                     defensive: dic["방어력"] as! Double,
                                     defensiveRe: dic["추가방어력"] as! Double,
                                     magicDefensive: dic["마저"] as! Double,
                                     magicDefensiveRe: dic["추가마저"] as! Double,
                                     row: dic["row"] as! Int,
                                     column: dic["column"] as! Int)
                                     models.append(newModel)
                                    }
            for data in models {
                let key = data.name
                nameArray.append(key)
            }
            nameArrayCount = nameArray.count
        }catch {
            fatalError()
        }
    }
    
    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return nameArrayCount
    }
    
    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        guard let cell = collectionView.dequeueReusableCell(withReuseIdentifier: ChamCellCollectionViewCell.identifier, for: indexPath) as? ChamCellCollectionViewCell else {
            fatalError()
        }
        cell.imageConfigure(with: UIImage(named:"가렌"))
            return cell
    }
  
}

B ViewController CollectionViewCell 类

import UIKit

class ChamCellCollectionViewCell : UICollectionViewCell{
    static let identifier = "ChamCellCollectionViewCell"
    
    private let imageView : UIImageView = {
       let image = UIImageView()
        image.contentMode = .scaleAspectFit
        return image
    }()
    
    override init(frame: CGRect) {
        super.init(frame: frame)
        
    }
    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    func imageConfigure(with image : UIImage?) {
        imageView.image = image
    }
    override func layoutSubviews() {
        super.layoutSubviews()
        imageView.frame = contentView.bounds
    }
    override func prepareForReuse() {
        super.prepareForReuse()
        imageView.image = nil
    }
}

【问题讨论】:

    标签: ios swift image uicollectionview uicollectionviewcell


    【解决方案1】:

    尝试为您的nameArrayCount 使用didSet

    var nameArrayCount = 0{
        didSet{
            collectionView.reloadData()
        }
    }
    

    【讨论】:

      【解决方案2】:

      将此代码添加到 getJson() 之前的 catch 块:

      DispatchQueue.main.async { [weak self] in
          self?.collectionView?.reloadData()
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-17
        • 2019-02-22
        • 1970-01-01
        • 2017-09-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多