class MovieViewController: UIViewController,UITableViewDataSource,UITableViewDelegate {
// 表格属性
vartable:UITableView=UITableView(frame:CGRect(x:0, y:0, width:scrWidth, height:scrHeight), style:UITableViewStyle.grouped)
// 给表格加载数据的字典
vartableData =
[
"武侠":[
["name":"《精武英雄》","author":"李连杰"],
["name":"《猛龙过江》","author":"李小龙"],
["name":"《我是谁》","author":"成龙"]
],
"爱情":[
["name":"《小时代》","author":"杨幂"],
["name":"《后来的我们》","author":"周冬雨"]
],
"科幻":[
["name":"《阿凡达》","author":"赵优"],
["name":"《机械公敌》","author":"威尔史密斯"],
["name":"《钢铁侠》","author":"小罗伯特唐尼"],
]
]
overridefuncviewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
// 设置表格的数据源和代理
self.table.dataSource=self
self.table.delegate=self
self.view.addSubview(self.table)
}
overridefuncdidReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
// MARK: - -------------- UITableViewDataSource ------------
// 返回分区数
funcnumberOfSections(in tableView:UITableView) ->Int{
returntableData.count
}
// 根据分区下标返回每个分区中有多少行
functableView(_tableView:UITableView, numberOfRowsInSection section:Int) ->Int{
// 得到表格字典的key的数值
letkeyArr =self.tableData.keys
// 通过分区下标,得到该分区对应的key
letkey = keyArr[keyArr.index(keyArr.startIndex, offsetBy: section)]
// 通过key得到对应的value,这个value是个数组
letsectionArr =self.tableData[key]
return(sectionArr?.count)!
}
// 单元格赋值方法
functableView(_tableView:UITableView, cellForRowAt indexPath:IndexPath) ->UITableViewCell{
letidentifier ="cell"
varcell = tableView.dequeueReusableCell(withIdentifier: identifier)
ifcell ==nil{
cell =UITableViewCell(style: .value1, reuseIdentifier: identifier)
}
// 得到所有key的数组
letkeyArr =self.tableData.keys
// 通过分区下标得到分区对应的key
letkey = keyArr[keyArr.index(keyArr.startIndex, offsetBy: indexPath.section)]
// 根据key得到分区的数组
letsectionArr =self.tableData[key]
// 根据行的下标得到该行对应的字典
letrowDic = sectionArr![indexPath.row]
// 给cell赋值
cell?.textLabel?.text= rowDic["name"]
cell?.detailTextLabel?.text= rowDic["author"]
returncell!
}
// 设置分区标题
functableView(_tableView:UITableView, titleForHeaderInSection section:Int) ->String? {
// 获取所有key的数组
letkeyArr =self.tableData.keys
// 根据分区下标获取对应的key
letkey = keyArr[keyArr.index(keyArr.startIndex, offsetBy: section)]
returnkey
}
// MARK: ---------- UITableViewDelegate --------
// 点击单元格触发
functableView(_tableView:UITableView, didSelectRowAt indexPath:IndexPath) {
// 字典所有key数组
letkeyArr =self.tableData.keys
// 选中的单元格所在的分区的key
letkey = keyArr[keyArr.index(keyArr.startIndex, offsetBy: indexPath.section)]
// 得到分区对应的数组
letsectionArr =self.tableData[key]
// 得到该选中的单元格对应的字典
letmovieDic = sectionArr![indexPath.row]
// 将名字和演员拼接成字符串
letmessage ="\(movieDic["name"]!)-\(movieDic["author"]!)"
// 定义alertController对象
letalertVC =UIAlertController(title:nil, message: message, preferredStyle: .alert)
// 添加控制按钮
alertVC.addAction(UIAlertAction(title:"确定", style: .default, handler:nil))
// 弹出提示视图
self.present(alertVC, animated:true, completion:nil)
}
// 设置所有单元格都可以编辑
functableView(_tableView:UITableView, canEditRowAt indexPath:IndexPath) ->Bool{
return true
}
// 编辑触发的回调
functableView(_tableView:UITableView, commit editingStyle:UITableViewCellEditingStyle, forRowAt indexPath:IndexPath) {
// 如果是删除操作
ifeditingStyle == .delete{
// 得到分区对应的key
letkey =self.tableData.keys[self.tableData.keys.index(self.tableData.keys.startIndex, offsetBy: indexPath.section)]
varsectionArr =self.tableData[key]
sectionArr?.remove(at: indexPath.row)
self.tableData.updateValue(sectionArr!, forKey: key)
self.table.reloadData()
}
}
/*
// MARK: - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
// Get the new view controller using segue.destinationViewController.
// Pass the selected object to the new view controller.
}
*/
}