美文网首页Swift
iOS-swift3.0 点滴积累:TableViewCell嵌

iOS-swift3.0 点滴积累:TableViewCell嵌

作者: xiaopavip | 来源:发表于2017-07-01 16:00 被阅读0次

    很多情况下,都会用到tableViewCell嵌套一个CollectionView,方便数据的展示与灵活控制,下面上代码来实现它。

    新建一个TableViewCell并勾选创建xib。然后在xib中拖一个CollectionView并设置好约束。然后创建一个CollectionViewCell并勾选创建xib,并处理好要展示的CollectionViewCell的布局。

    TableViewCell中代码:

    import UIKit
    
    class TableViewCell: UITableViewCell {
        static let identifier = "TableViewCell"
        //CollectionView数据源
        public var bankArray: [Model] = []
        // CollectionViewCell点击
        var gotoViewControllerCardClosure: ((_ bankId: Int)->Void)?
        
        @IBOutlet weak var collectionView: UICollectionView!
        
        override func awakeFromNib() {
            super.awakeFromNib()
            let flowLayout = UICollectionViewFlowLayout()
            flowLayout.itemSize = CGSize(width: (PCScreenWidth - 30) / 3, height: (PCScreenWidth - 30) / 3)
            flowLayout.minimumInteritemSpacing = 0;
            flowLayout.minimumLineSpacing = 0;
            collectionView.collectionViewLayout = flowLayout
            collectionView!.register(UINib(nibName:"CollectionViewCell", bundle:nil),
                                          forCellWithReuseIdentifier: "cell")
            collectionView.delegate = self
            collectionView.dataSource = self
        }
    
        override func setSelected(_ selected: Bool, animated: Bool) {
            super.setSelected(selected, animated: animated)
    
            // Configure the view for the selected state
        }
        
    }
    
    extension TableViewCell: UICollectionViewDelegate, UICollectionViewDataSource {
    
        func collectionView(_ collectionView: UICollectionView,
                            numberOfItemsInSection section: Int) -> Int {
            return bankArray.count > 6 ? 6 : bankArray.count //最多显示6个CollectionViewCell,根据需要自己调整
        }
        
        func collectionView(_ collectionView: UICollectionView,
                            cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
            let cell  = collectionView.dequeueReusableCell(withReuseIdentifier: "cell",
                                                           for: indexPath) as! CreditCardCollectionViewCell
            let model = bankArray[indexPath.row]
            //设置CollectionViewCell  ...
            return cell
        }
        
        func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath){
            gotoViewControllerCardClosure?(bankArray[indexPath.row].id)
        }
    }
    

    ViewController中设置TableView的cell

    let cell = tableView.dequeueReusableCell(withIdentifier: TableViewCell.identifier) as! TableViewCell
                        cell.bankArray = bankArray
                        cell. gotoViewControllerClosure = { [weak self] bankId in
                            guard let strongSelf = self else {
                                return
                            }
                            //跳转需要处理的业务
                            //.......
                        }
                        return cell
    

    OK,大功告成~ 基本思路就是这样。如果展示效果不是自己想要的,再调整下对应设置与代码控制。

    相关文章

      网友评论

        本文标题:iOS-swift3.0 点滴积累:TableViewCell嵌

        本文链接:https://www.haomeiwen.com/subject/tysbcxtx.html