swift自定義分割槽表格
阿新 • • 發佈:2018-12-20
建立一個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
}
}