如何从另一个类执行 collectionView 方法?

Posted

技术标签:

【中文标题】如何从另一个类执行 collectionView 方法?【英文标题】:How can I execute the collectionView methods of a class from another one? 【发布时间】:2019-09-13 20:10:57 【问题描述】:

我有我的类 CardSensors,它有一个 collectionView,里面装满了另一个 XIB

class CardSensors: UIView 
    @IBOutlet weak var botName: UILabel!
    @IBOutlet weak var sensorsCollectionView: UICollectionView!
    var sensors = [[String: Any]]()

    var viewModel: NewsFeedViewModel! 
        didSet 
            setUpView()
        
    

    func setSensors(sensors: [[String: Any]])
        self.sensors = sensors
    

    static func loadFromNib() -> CardSensors 
        return Bundle.main.loadNibNamed("CardSensor", owner: nil, options: nil)?.first as! CardSensors
    

    override func awakeFromNib() 
        super.awakeFromNib()
        // Initialization code
    

    func setupCollectionView()
        let nibName = UINib(nibName: "SensorCollectionViewCell", bundle: Bundle.main)
        sensorsCollectionView.register(nibName, forCellWithReuseIdentifier: "SensorCollectionViewCell")
    

    func setUpView() 
        botName.text = viewModel.botName
    



extension CardSensors: UICollectionViewDataSource 

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell 
        guard let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "SensorCollectionViewCell", for: indexPath) as? SensorCell else 
            return UICollectionViewCell()
        

        cell.dateLabel.text = sensors[indexPath.row]["created_at"] as? String
        cell.sensorType.text = sensors[indexPath.row]["type"] as? String
        cell.sensorValue.text = sensors[indexPath.row]["value"] as? String
        cell.sensorImage.image = UIImage(named: (sensors[indexPath.row]["type"] as? String)!)

        return cell
    

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

        return sensors.count
    


我正在像这样的另一个类中创建一个对象,但我希望它调用 collectionView 的方法以加载信息。

let sensorView = CardSensors.loadFromNib()
sensorView.sensors = sensores
sensorView.setupCollectionView()

问题是 collectionView 方法永远不会被调用。我该怎么做才能从我的其他班级给他们打电话?

【问题讨论】:

【参考方案1】:

你需要设置数据源

 sensorsCollectionView.register(nibName, forCellWithReuseIdentifier: "SensorCollectionViewCell")
 sensorsCollectionView.dataSource = self
 sensorsCollectionView.reloadData()

然后在你的 vc 里面,把它变成一个实例变量

var sensorView:CardSensors!

sensorView = CardSensors.loadFromNib()
sensorView.sensors = sensores
sensorView.setupCollectionView()

【讨论】:

以上是关于如何从另一个类执行 collectionView 方法?的主要内容,如果未能解决你的问题,请参考以下文章

如何从另一个类调用执行 segue 方法?

将数据从 Collectionview 传递到 UIcollectionResuableview

如何从另一个类分配 RootVisual

如何从另一个 Qt Widget 表单类调用 MainWindow 类

如何从另一个类中的一个类调用 setter 函数?

如何从另一个类中调用 onItemClick 方法?