想在 swift3 中创建一个集合视图

want to create a collection view in swift3

我想创建具有可扩展格式的 uicollectionview。 当我们点击可扩展单元格时,应该加载部分单元格中的更多内容。再次录音后关闭该部分。 这就像展开和折叠部分。 部分单元格和内部单元格都是动态的。

你将不得不做这样的事情。

全局创建一个这样的结构,以便您可以在//您的 table 方法中访问它们。

class ViewController: UIViewController,UITableViewDataSource,UITableViewDelegate{
    @IBOutlet var tblView: UITableView!
    let arr = [ "dict1":["1":"one","2":"two"],
                "dict2":["3":"three","2":"four"],
    ] as [String : Any]
    var arrDict = [[String:AnyObject]]()
    var aDict1 = [String:Any]()
    var aDict2 = [String:Any]()
    var aDict3 = [String:Any]()
    var isbuttonTappedForExpand = false

    override func viewDidLoad() {
        super.viewDidLoad()

        aDict1 = ["Tittle": "Quick Start",
                      "RowKey": "0",
                      "ValueKey": ["Section0 row0",
                                        "Section0 row1",
                                        "Section0 row2",
                                       ]
                      ] as [String : Any]

        aDict2 = ["Tittle": "Personal",
                      "RowKey": "0",
                      "ValueKey": ["Section0 row1",
                                        "Section1 row1",
                                        "Section1 row2",
                                        ]
                     ] as [String : Any]

       aDict3 = ["Tittle": "Business",
                      "RowKey": "0",
                      "ValueKey": ["Section0 row2",
                                          "Section2 row1",
                                          "Section2 row2",
                                        ]
                    ] as [String : Any]

        arrDict.append(aDict1 as [String : AnyObject])
        arrDict.append(aDict2 as [String : AnyObject])
        arrDict.append(aDict3 as [String : AnyObject])

        print("Array of dictionaries is\(arrDict)")
        print([arr ])
        print( arrDict[0]["Tittle"] ?? 2)
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

//Then pass your data into tableview delegate methods


    func numberOfSections(in tableView: UITableView) -> Int {

        return arrDict.count

    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        if (arrDict[section]["RowKey"] as? String == "0"){
        return 0
    }
        else{
            return arrDict.count
            }
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell{

        let cell:CustomTableViewCell = tableView .dequeueReusableCell(withIdentifier: "cell") as! CustomTableViewCell
        let arr = arrDict[indexPath.row]["ValueKey"] as! [String]
        cell.btnClickAddMore.addTarget(self, action: #selector(pressButton(button:)), for: .touchUpInside)
        return cell
    }

    func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat{

        return 100
    }

//you will have to add sections first after clicking on sections you will get your cell so here you will make your view for section


    func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int){

        view.tintColor = UIColor .black

    }

    func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView?  {
        let rect = CGRect(x: 0, y: 0, width: tblView.frame.size.width, height: 100)
        let headerView = UIView(frame:rect)
        headerView.backgroundColor = .blue
        let bundle = Bundle(for: type(of: self))
        let nib = UINib(nibName: "SectionView", bundle: bundle)
        let view = nib.instantiate(withOwner: self, options: nil)[0] as! SectionViewClass
        view.btnClickAdd.backgroundColor = .blue
        view.btnClickAdd.tag = section
        view.btnClickAdd.addTarget(self, action: #selector(pressButton(button:)), for: .touchUpInside)
        view.frame = headerView.bounds
        view.autoresizingMask = [.flexibleWidth, .flexibleHeight]
        headerView.addSubview(view)
        return headerView
    }

    func pressButton(button: UIButton) {

        if (arrDict[button.tag]["RowKey"] as? String == "0") {

            arrDict[button.tag]["RowKey"] = "1" as AnyObject?

        }
        else if (arrDict[button.tag]["RowKey"] as? String == "1") {

             arrDict[button.tag]["RowKey"] = "0" as AnyObject?

        }
        tblView .reloadData()

    }
}