swift自定义分区表格

创建一个GroupModel的模型

 var title:String
    var arr:NSMutableArray
    
    init(title:String,arr:NSMutableArray) {
        
        self.title = title
        self.arr = arr
    }

在创建一个CellModel的模型

var img:String
    var title:String
    var detail:String
    var img2:String
    var bool:String
    var type:String
    
 init(img:String,title:String,detail:String,img2:String,bool:String,type:String) {
    self.img = img
    self.title = title
    self.detail = detail
    self.img2 = img2
    self.bool = bool
    self.type = type
    }

创建第一个自定义Cell类,FirstCell

因为省事直接拖线
@IBOutlet weak var imgView: UIImageView!
    @IBOutlet weak var title: UILabel!
    @IBOutlet weak var btn: UIButton!
    自定义cell的方法属性
func setCellData(md:CellModel) {
        
        self.btn.layer.cornerRadius = 15
        self.btn.clipsToBounds = true
        
        if md.bool == "0" {
            self.btn.isHidden = true
        }else{
            self.btn.isHidden = false
        }
        
        self.imgView.image = UIImage(named: md.img)
        self.title.text = md.title
    }
    

创建第二个自定义cell类,SecondCell

拖线
@IBOutlet weak var imgView: UIImageView!
    @IBOutlet weak var title: UILabel!
    
    @IBOutlet weak var detailTitle: UILabel!
    @IBOutlet weak var img2View: UIImageView!
    重新的方法
    func setCellData(md:CellModel) {
        
        self.imgView.image = UIImage(named: md.img)
        self.title.text = md.title
        self.detailTitle.text = md.detail
        self.img2View.image = UIImage(named: md.img2)
        
    }

接下来是主界面 详细看里面注释

import UIKit

class ViewController: UIViewController,UITableViewDelegate,UITableViewDataSource {
    //总数据源
    var jsonDic:NSDictionary = [:]
    //shuzu
    var arr = [String]()
    //分区数组
    var gmArr:NSMutableArray = []
    
    var tbv:UITableView?
    override func viewDidLoad() {
        super.viewDidLoad()
        //自己写的json文件 直接获取的本地文件
        let path = Bundle.main.path(forResource: "discover", ofType: "json")
        let url = URL(fileURLWithPath: path!)
        // 带throws的方法需要抛异常
        do {
        
            let data = try Data(contentsOf: url)
            let jsonData:Any = try JSONSerialization.jsonObject(with: data, options: JSONSerialization.ReadingOptions.mutableContainers)
            jsonDic = jsonData as! NSDictionary
            
           // print(jsonDic)
            
           // arr = (jsonDic.allKeys as NSArray) as! [String]
            arr = ["group1","group2","group3","group4"];
            for k in arr {
               
                let gm:GroupModel = GroupModel(title:k, arr: jsonDic.object(forKey: k) as! NSMutableArray)
                print(gm.arr)
                let carr:NSMutableArray = []
                for j in gm.arr{
                    
                    let i:NSDictionary = j as! NSDictionary
                    
                    let cm = CellModel(img:i.object(forKey: "img") as! String, title: i.object(forKey: "title") as! String, detail: i.object(forKey: "detailtitle") as! String, img2: i.object(forKey: "img2") as! String, bool: i.object(forKey: "bool") as! String, type: i.object(forKey: "type") as! String)
                  //  print(cm.img)
                    carr.add(cm)
                }
                gm.arr.removeAllObjects()
                print("////----\(gm.arr)")
                gm.arr = carr
                print("////----\(gm.arr)")
                let str:CellModel = gm.arr[0] as! CellModel
                print("////----\(str.img)")
                gmArr.add(gm)
            }
            print("====\(gmArr)")
            self.tbv?.reloadData()
        } catch let error as Error? {
            print("读取本地数据出现错误!",error!)
        }
        
        tbv = UITableView(frame: self.view.frame, style: .grouped)
        tbv?.delegate = self
        tbv?.dataSource = self
        
        tbv?.register(UINib(nibName: "FirstCell", bundle: nil), forCellReuseIdentifier: "fcell")
        tbv?.register(UINib(nibName: "SecondCell", bundle: nil), forCellReuseIdentifier: "scell")
        view?.addSubview(tbv!)
        
    }
    
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        
        let gm:GroupModel = self.gmArr[section] as! GroupModel
        print("------\(gm.arr)")
        return gm.arr.count
}
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        
        let gm:GroupModel = self.gmArr[indexPath.section] as! GroupModel
        let cm:CellModel = gm.arr[indexPath.row] as! CellModel
        
        if cm.type == "1" {
            let cell:FirstCell = tableView.dequeueReusableCell(withIdentifier: "fcell") as! FirstCell
            cell.setCellData(md: cm)
            cell.accessoryType = .disclosureIndicator
           return cell
        }else{
            let cell:SecondCell = tableView.dequeueReusableCell(withIdentifier: "scell") as! SecondCell
            cell.setCellData(md: cm)
            cell.accessoryType = .disclosureIndicator
            return cell
        }
        
    }
    
    func numberOfSections(in tableView: UITableView) -> Int {
        return self.gmArr.count
    }

    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        return 80
    }

}

猜你喜欢

转载自blog.csdn.net/wangai9140/article/details/85063744
今日推荐