1. 程式人生 > >swift自定義分割槽表格

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
    }

}