https://github.com/potato512/SYSwiftLearning
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
self.navigationItem.title = "editTable"
// 切换列表的编辑模式
// 方法1 自定义按钮
// let editButton = UIButton(type: .Custom)
// editButton.frame = CGRectMake(0.0, 0.0, 60.0, 40.0)
// editButton.setTitle("edit", forState: .Normal)
// editButton.setTitleColor(UIColor.blackColor(), forState: .Normal)
// editButton.selected = false
// editButton.addTarget(self, action: Selector("editClick:"), forControlEvents: .TouchUpInside)
// self.navigationItem.rightBarButtonItem = UIBarButtonItem(customView: editButton)
// 方法2 系统按钮
self.navigationItem.rightBarButtonItem = self.editButtonItem()
self.setLocalData()
self.setUI()
}
// MARK: - 数据
func setLocalData()
{
self.mainArray = NSMutableArray()
for number in 1...10
{
let numberTmp = random() % 1000 + number
self.mainArray.addObject(String(numberTmp))
}
}
// MARK: - 视图
func setUI()
{
self.mainTableView = UITableView(frame: self.view.bounds, style: .Plain)
self.view.addSubview(self.mainTableView)
self.mainTableView.backgroundColor = UIColor.clearColor()
self.mainTableView.delegate = self
self.mainTableView.dataSource = self
self.mainTableView.autoresizingMask = UIViewAutoresizing.FlexibleHeight
self.mainTableView.tableFooterView = UIView()
}
// MARK: - click
func editClick(button:UIButton)
{
// 进入编辑模式,或退出编辑模式
// 方式1
// self.mainTableView.editing = !self.mainTableView.editing
//
// button.setTitle((self.mainTableView.editing ? "done" : "edit"), forState: .Normal)
// 方法2
button.selected = !button.selected
self.mainTableView.setEditing(button.selected, animated: true)
button.setTitle((button.selected ? "done" : "edit"), forState: .Normal)
}
// 进入编辑模式(结合导航栏编辑按钮使用:self.navigationItem.rightBarButtonItem = self.editButtonItem())
override func setEditing(editing: Bool, animated: Bool) {
super.setEditing(editing, animated: animated)
self.mainTableView.setEditing(editing, animated: true)
}
// MARK: - UITableViewDataSource, UITableViewDelegate
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.mainArray.count
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var cell:UITableViewCell! = tableView.dequeueReusableCellWithIdentifier("UITableViewCell")
if cell == nil
{
cell = UITableViewCell(style: .Default, reuseIdentifier: "UITableViewCell")
}
let text = self.mainArray[indexPath.row] as! String
cell.textLabel!.text = text
return cell
}
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
tableView.deselectRowAtIndexPath(indexPath, animated: true)
}
// MARK: - cell编辑
// func tableView(tableView: UITableView, editActionsForRowAtIndexPath indexPath: NSIndexPath) -> [UITableViewRowAction]? {
//
// }
// func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool {
// return true
// }
// MARK: 删除,或插入
// cell的编辑样式
func tableView(tableView: UITableView, editingStyleForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCellEditingStyle {
if indexPath.row == self.mainArray.count - 1
{
// 最后一个时插入
return UITableViewCellEditingStyle.Insert
}
else if indexPath.row == 0
{
// 第一个没有编辑模式
return UITableViewCellEditingStyle.None
}
// 其他cell为删除的编辑模式(设置tableView的editing属性进行删除操作;或左滑cell进行删除操作)
return UITableViewCellEditingStyle.Delete
}
// cell的删除编辑样式下按钮标题
func tableView(tableView: UITableView, titleForDeleteConfirmationButtonForRowAtIndexPath indexPath: NSIndexPath) -> String? {
return "删除"
}
// cell的编辑响应
func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
if (editingStyle == UITableViewCellEditingStyle.Delete)
{
// 删除数据方法1(先删除数据,再重新加载全部数据)
// self.mainArray.removeObjectAtIndex(indexPath.row)
// self.mainTableView.reloadData()
// 删除数据方法2(先删除数据,再删除cell)
self.mainArray.removeObjectAtIndex(indexPath.row)
self.mainTableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.None)
}
else if (editingStyle == UITableViewCellEditingStyle.Insert)
{
// 添加数据方法1(先添加数据,再重新加载全部数据)
// self.mainArray.addObject("添加数据")
// self.mainTableView.reloadData()
// 添加数据方法2(先添加数据,再添加cell)
self.mainArray.addObject("添加数据")
self.mainTableView.insertRowsAtIndexPaths([NSIndexPath(forRow: (self.mainArray.count - 1), inSection: 0)], withRowAnimation: UITableViewRowAnimation.None)
}
}
// MARK: 移动(注意:两个代理方法必须同时实现)
// cell可移动
func tableView(tableView: UITableView, canMoveRowAtIndexPath indexPath: NSIndexPath) -> Bool {
return true
}
// 移动cell事件
func tableView(tableView: UITableView, moveRowAtIndexPath fromIndexPath: NSIndexPath, toIndexPath: NSIndexPath) {
if fromIndexPath != toIndexPath
{
// 获取移动行对应的值
let itemValue = self.mainArray[fromIndexPath.row]
// 删除移动的值
self.mainArray.removeObjectAtIndex(fromIndexPath.row)
// 如果移动区域大于现有行数,直接在最后添加移动的值
if toIndexPath.row > self.mainArray.count
{
self.mainArray.addObject(itemValue)
}
else
{
// 没有超过最大行数,则在目标位置添加刚才删除的值
self.mainArray.insertObject(itemValue, atIndex:toIndexPath.row)
}
}
}