创建一个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
}
}