导入UIKit
//添加两个代理协议,表格视图的代理协议和表格数据源的代理协议
class ViewController:UIViewController,UITableViewDelegate,UITableViewDataSource {
//创建一个数组,作为表格的数据来源
var weeks = [“Monday”,“Tuesday”,“WednesDay”,“Thursday”,“Friday”,“Saturday”,“Sunday”,“Monday”,“Tuesday”,“WednesDay”,“Thursday”,“Friday” “ , “星期六星期天”]
override func viewDidLoad(){
super.viewDidLoad()
//在加载视图后进行任何其他设置,通常是从笔尖。
//创建一个显示区域
let rect = CGRect(x:0,y:40,width:320,height:420)
//初始化一个表格视图
let tableView = UITableView(frame:rect)
//设置表格视图的代理为当前视图控制器类
tableView.delegate = self
//设置表格视图的数据源为当前视图控制器类
tableView.dataSource = self
//默认状态下开启表格的编辑模式
tableView.setEditing(true,animated:true)
//初始化一个索引路径对象,表示表格中的第一和第七行的位置
let indexPath = IndexPath(row:11,section:0)
//调用表格对像滚动到指定位置的方法,页面加载完成时滑动到指定索引位置
tableView.scrollToRow(at: indexPath, at: UITableViewScrollPosition.top, animated: true)
self.view.addSubview(tableView)
}
// 代理方法,设置单元格行数(该方法必须添加)
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return weeks.count
}
// 代理方法,用来设置表格行的高度为80
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 80
}
// 代理方法,用来初始化表格单元或者复用表格单元(该方法必须添加)
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
// 创建一个字符串,作为单元格的复用标示符
let identifier = "reusedCell"
var cell = tableView.dequeueReusableCell(withIdentifier: identifier)
// 如果没有可使用的单元格,则创建新的单元格,并拥有一个复用标示符
if(cell == nil){
cell = UITableViewCell(style: UITableViewCellStyle.subtitle, reuseIdentifier: identifier)
}
// 索引路径用来表示单元格在表格中的位置,有section和row两个属性,前者表示在第几个段落,后者表示在第几行
let rowNum = indexPath.row
// 默认样式单元格拥有一个标签对象,在此设置标签对象的文字内容
// 根据当前段落行数,设置单元格标题文字
cell?.textLabel?.text = weeks[rowNum]
// 在标签下方有一个描述文字标签
cell?.detailTextLabel?.text = "Detail Information here"
// 读取图片素材
let img1 = UIImage(named: "pic1")
let img2 = UIImage(named: "pic2")
// 设置表格单元的默认图片为img1
cell?.imageView?.image = img1
// 设置表格单元高亮的图片为img2
cell?.imageView?.highlightedImage = img2
// 设置单元格的背景颜色
// cell?.backgroundColor = UIColor.blue
// 注:也可以设置一个新的视图为单元格的背景视图
let bgimg = UIImage(named: "img1")
let imgView = UIImageView(frame: CGRect(x: 0, y: 0, width: 100, height: 80))
imgView.image = bgimg
cell?.backgroundView = imgView
return cell!;
}
// 代理方法,用来响应单元格的点击事件
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
// 获取表格中点击的单元格
let cell = tableView.cellForRow(at: indexPath)
// 如果被点击的单元格没显示附加图标,则添加附加图标,表示当前单元格处于被选中的状态
if(cell?.accessoryType == UITableViewCellAccessoryType.none){
cell?.accessoryType = UITableViewCellAccessoryType.checkmark
}
// 如果已存在附加图标则隐藏附加图标,表示当前单元格的非选中状态
else{
cell?.accessoryType = UITableViewCellAccessoryType.none
}
}
// 代理方法,用来设置单元格的编辑模式
func tableView(_ tableView: UITableView, editingStyleForRowAt indexPath: IndexPath) -> UITableViewCellEditingStyle {
return UITableViewCellEditingStyle.none
}
// 代理方法,用来设置是否允许拖动
func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool {
return true
}
// 代理方法,用来响应单元格的移动事件
func tableView(_ tableView: UITableView, moveRowAt sourceIndexPath: IndexPath, to destinationIndexPath: IndexPath) {
// 获得单元格移动前的位置
let fromRow = sourceIndexPath.row
// 获得单元格移动后的位置
let toRow = destinationIndexPath.row
// 获得数组在单元格移动前的对象
let obj = weeks[fromRow]
// 删除数组中单元格移动前的对象
weeks.remove(at: fromRow)
// 然后在数组中的目标位置插入一份删除的对象,以同步数据源
weeks.insert(obj, at: toRow)
}
// 代理方法,用来设置单元格的编辑模式为删除模式
// func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> UITableViewCellEditingStyle {
// return UITableViewCellEditingStyle.delete
// }
// 代理方法,用来响应单元格的删除事件
// func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
//// 判断如果编辑模式为删除,则执行之后的代码
// if(editingStyle == UITableViewCellEditingStyle.delete){
//// 获取单元格在段落中行数
// let rowNum = indexPath.row
//// 将该单元格的内容清除,以保证数据的一致性
// weeks.remove(at: rowNum)
//
//// 创建一个包含待删除单元格位置信息的数组
// let indexPaths = [indexPath]
//// 从表格中清除该单元格
// tableView.deleteRows(at: indexPaths, with: UITableViewRowAnimation.automatic)
// }
// }
// 代理方法,用来设置单元格的编辑模式为插入模式
// func tableView(_ tableView: UITableView, editingStyleForRowAt indexPath: IndexPath) -> UITableViewCellEditingStyle {
//返回UITableViewCellEditingStyle.insert
//}
// func tableView(_ tableView:UITableView,commit editingStyle:UITableViewCellEditingStyle,forRowAt indexPath:IndexPath){
////判断如果编辑模式为插入,则执行之后的代码
// if(editingStyle == UITableViewCellEditingStyle.insert){
////获取单元格在段落中行数
//让rowNum = indexPath.row
////往数组中同步插入新数据,及时更新数据源
// weeks.insert(“Honey Moon”,at:rowNum)
//
////创建一个包含待插入单元格位置信息的数组
//让indexPaths = [indexPath]
////往表格视图中指定的位置插入新单元格
// tableView.deleteRows(at:indexPaths,with:UITableViewRowAnimation.right)
//}
//}
override func didReceiveMemoryWarning(){
super.didReceiveMemoryWarning()
//处理可以重新创建的任何资源。
}
}