代码之家  ›  专栏  ›  技术社区  ›  WH48

使用字典值填充TabVIEW内部的CopyVIEW的标签

  •  0
  • WH48  · 技术社区  · 6 年前

    所以我有一个 collectionView 在一个 tableView 是的。我想使用数组中的值填充每个标签中的文本 collectionViewCell 是的。如果我把下面的代码 集合视图 cellForItemAt 我得到了下面的结果(见图)(显然索引超出了范围):

    Print(array[indexPath.row].details.values)
    

    因此,使用照片中的示例,我如何获得以下信息:

    • 外部表格视图单元格(1)
      • 集合视图单元格(1)
        • 标签-“1”
      • 集合视图单元格(2)
        • 标签-“3”
      • 集合视图单元格(3)
        • 标签“5”
    • 外部表格视图单元格(2)
      • 集合视图单元格(1)
        • 标签-“7”

    另外,正如您可能注意到它的数组不在顺序中一样,是否可以对其重新排序:

    [“1”:1,“2”:3,“3”:5]

    非常感谢您的帮助,非常感谢!啊!

    我的阵列:

    Data to display in label

    3 回复  |  直到 6 年前
        1
  •  2
  •   Rizwan Mehboob    6 年前

    根据你的要求这里是代码

    import UIKit
    
    class ViewController: UIViewController,UITableViewDelegate,UITableViewDataSource {
    
        // Global Variable
        var tableView: UITableView!
        var dataArray = [["2": 3, "1": 1, "3": 5], ["1":7]]
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            tableView = UITableView(frame: self.view.bounds)
            tableView.delegate = self
            tableView.dataSource = self
            self.view.addSubview(tableView)
    
            tableView.register(TableViewCell.self, forCellReuseIdentifier: "TableViewCell")
        }
    
        func numberOfSectionsInTableView(tableView: UITableView) -> Int {
            return 1
        }
    
        func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
            return dataArray.count
        }
    
        func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
                let cell: TableViewCell = tableView.dequeueReusableCell(withIdentifier: "TableViewCell", for: indexPath as IndexPath) as! TableViewCell
         //   Passing data to cellection cell
                cell.cellData = dataArray[indexPath.row]
                cell.backgroundColor = UIColor.groupTableViewBackground
                return cell
    
    
        }
    
    }
    
    class TableViewCell: UITableViewCell, UICollectionViewDataSource, UICollectionViewDelegate {
    
        var collectionView: UICollectionView!
        var cellData = [String: Int]()
    
        override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
            super.init(style: style, reuseIdentifier: reuseIdentifier)
    
            let layout = UICollectionViewFlowLayout()
            layout.scrollDirection = UICollectionViewScrollDirection.horizontal
    
            collectionView = UICollectionView(frame: self.bounds, collectionViewLayout: layout)
            collectionView.delegate = self
            collectionView.dataSource = self
            collectionView.register(CollectionCell.self, forCellWithReuseIdentifier: "CollectionViewCell")
            collectionView.backgroundColor = UIColor.clear
    
            self.addSubview(collectionView)
        }
    
        required init?(coder aDecoder: NSCoder) {
            super.init(coder: aDecoder)
        }
    
        // MARK: UICollectionViewDataSource
        func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int {
            return 1
        }
    
    
        func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
            return cellData.count
        }
    
        func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
            let cell: CollectionCell = collectionView.dequeueReusableCell(withReuseIdentifier: "CollectionViewCell", for: indexPath as IndexPath) as! CollectionCell
            cell.textLable.text = String(Array(cellData)[indexPath.row].value) // Please check here is some casting 
            cell.backgroundColor = .black
            return cell
        }
    }
    
    class CollectionCell: UICollectionViewCell {
    
        let textLable: UILabel = {
            let label = UILabel(frame: CGRect(x: 0, y: 0, width: 20, height: 20))
            label.textColor = .white
            label.translatesAutoresizingMaskIntoConstraints = true
            label.textAlignment = .center
            return label
        }()
    
        override init(frame: CGRect) {
            super.init(frame: frame)
            setupLayout()
        }
    
        private func setupLayout() {
            addSubview(textLable)
        }
    
        required init?(coder aDecoder: NSCoder) {
            fatalError("init(coder:) has not been implemented")
        }
    }
    

    我希望它能解决你的问题。

    结果

    enter image description here

        2
  •  0
  •   Joakim Danielson    6 年前

    如果我理解正确的话,你有一个数组,格式有点奇怪

    array = [[["2": 3, "1": 1, "3": 5]], [["1":7]]]
    

    由于collection视图位于表视图中,我认为您已经实现了 NSTableViewDataSource 然后,可以将表视图的当前行保存为table view:view for:中的属性,从而获取要与该属性一起使用的数组。因为数组中有一个数组,所以我们需要获取该数组中的第一个项,然后在键与当前indexpath.row匹配的地方筛选该项(字典)。

    let row = String(indexPath.row + 1)
    let item = array[currentTableViewRow][0].filter {$0.key = row}
    if !item.isEmpty {
         label.text = item.value
    }
    
        3
  •  -1
  •   Vishal Patel    6 年前

    把它转换成 阵列 有了这个:

    Array(array[indexPath.row].details.values)
    

    然后按正确的顺序打印这个值,得到正确的数组。

    希望对你有帮助,

    谢谢您。