UITableView 数据源来自 UICollectionViewCell 中的类对象



我希望看到每个对象在每行中显示inventory的每个allItems。就像现在一样,我写indexPathOfCollectionView的地方,有一个 0 可以看到它实际上在工作,但我不知道我应该写哪个变量才能从inventory中看到每个allItems

var inventory = [Item]()
class Item {
    var name: String!
    var allItems: [String]!
    init(name: String, allItems: [String]) {
        self.name = name
        self.allItems = allItems
    }
}

收集单元:

class ItemCollectionViewCell: UICollectionViewCell, UITableViewDelegate, UITableViewDataSource {
    var inventory = [Item]()
    @IBOutlet weak var testTableView: UITableView!
    @IBOutlet weak var nameLabel: UILabel!
    func configureCell(_ inventory: Item) {
        nameLabel.text = inventory[indexPath.row]
        testTableView.dataSource = self
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return inventory[indexPathOfCollectionView*].allItems.count
    }
    func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        var cell: UITableViewCell? = tableView.dequeueReusableCell(withIdentifier: "ItemsCell")
    if(cell == nil){
        cell = UITableViewCell(style: UITableViewCellStyle.default, reuseIdentifier: "ItemsCell")
    }
        cell.textLabel?.text = inventory[indexPathOfCollection*].allItems[indexPath.row]
        return cell
    }
}

这是在viewController

    class VC: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource {
        func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
            return inventory.count
        }
        func numberOfSections(in collectionView: UICollectionView) -> Int {
            return 1
        }
        func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
            let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "CollectionCellItem", for: indexPath) as! ItemCollectionViewCell
            let it: Item!
            it = inventory[indexPath.row]
            cell.configureCell(it)
            return cell
        }
    }

这是我得到的屏幕截图

我所知,从您的类中删除Inventory数组Item因为它在您的模型中不需要。它应该与UIViewController一起存在。进行以下更改应该使您的代码按要求运行!

将您的UIViewController更改为-

class VC: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource {
    var inventory = [Item]()
    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
         return inventory.count
    }
    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "CollectionCellItem", for: indexPath) as! ItemCollectionViewCell
        //Just pass the model inside of the array!
        cell.itemsList = inventory[indexPath.item]
        cell.configureCell()
        return cell
    }
}

在你的UICollectionViewCell

class ItemCollectionViewCell: UICollectionViewCell, UITableViewDelegate, UITableViewDataSource {
    var itemsList : Item!
    @IBOutlet weak var testTableView: UITableView!
    @IBOutlet weak var nameLabel: UILabel!
    override func awakeFromNib() {
         super.awakeFromNib()
         testTableView.dataSource = self
    }
    func configureCell() {
        testTableView.reloadData()
    }
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return itemsList.allItems.count
    }
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        var cell: UITableViewCell? = tableView.dequeueReusableCell(withIdentifier: "ItemsCell")
        if(cell == nil){
             cell = UITableViewCell(style: UITableViewCellStyle.default, reuseIdentifier: "ItemsCell")
        }
        //get array of strings from inside that particular model!
        cell.textLabel?.text = itemsList.allItems[indexPath.row]
        return cell
    }
}

最新更新