swift UITableView(七)

来源:互联网 发布:农民资金合作社软件 编辑:程序博客网 时间:2024/06/05 07:24

UITableView的数据编辑功能

我们上一节主要讲了tableView分区头视图等的一些问题

继续使用上节代码(代码下载方式见第六节末尾)


这节我们主要实现一下table 的编辑状态

类似如下界面:

其实实现以上界面很简单是需要设置一下tableView 的一个属性即可

[html] view plaincopy
  1. _tableView.setEditing(true, animated: true)  


我们先添加button分别对应添加和删除

[html] view plaincopy
  1. //添加编辑按钮  
  2. let btnEdit=UIButton(frame: CGRectMake(10, 20, 120, 36))  
  3. btnEdit.addTarget(self, action: "btnEditAct:", forControlEvents: UIControlEvents.TouchDown)  
  4. btnEdit.setTitle("删除", forState: UIControlState.Normal)  
  5. btnEdit.setTitleColor(UIColor.redColor(), forState: UIControlState.Normal)  
  6. self.view.addSubview(btnEdit)  
  7.   
  8.   
  9. let btnEdit1=UIButton(frame: CGRectMake(150, 20, 120, 36))  
  10. btnEdit1.addTarget(self, action: "btnEditAct1:", forControlEvents: UIControlEvents.TouchDown)  
  11. btnEdit1.setTitle("添加", forState: UIControlState.Normal)  
  12. btnEdit1.setTitleColor(UIColor.redColor(), forState: UIControlState.Normal)  
  13. self.view.addSubview(btnEdit1)  

 

我们首先实现一下删除按钮(应为默认就是删除按钮,无需做更多操作)

[html] view plaincopy
  1. //删除按钮  
  2. func btnEditAct(sender:UIButton)  
  3. {  
  4.       
  5.     if _tableView.editing  
  6.     {  
  7.         _tableView.setEditing(false, animated: true)  
  8.     }else{  
  9.         _tableView.setEditing(true, animated: true)  
  10.     }  
  11.       
  12. }  

这里首先判断当前table 是否为编辑状态 如果是的话 取消编辑状态 否则打开编辑状态

我们运行程序 点击删除按钮看看效果


接下来我们实现 增加按钮的功能。

实现之前我们得了解一个tableView的代理方法

[html] view plaincopy
  1. func tableView(tableView: UITableView, editingStyleForRowAtIndexPath  indexPath: NSIndexPath) ->UITableViewCellEditingStyle  

此代理方法会返回一个 UITableViewCellEditingStyle   一般有两种情况 Delete Insert  分别对应删除 添加两种情况

首先我们建一个bool参数 用来记录我们点击的是删除还是添加

[html] view plaincopy
  1. var isDelIns:Bool!  
每次点击的时候设置删除按钮是设置为 true  点击添加按钮之后设置为false


[html] view plaincopy
  1. //删除按钮  
  2. func btnEditAct(sender:UIButton)  
  3. {  
  4.     isDelIns=true  
  5.       
  6.     if _tableView.editing  
  7.     {  
  8.         _tableView.setEditing(false, animated: true)  
  9.     }else{  
  10.         _tableView.setEditing(true, animated: true)  
  11.     }  
  12.       
  13. }  
  14.   
  15. //添加按钮  
  16. func btnEditAct1(sender:UIButton)  
  17. {  
  18.     isDelIns=false  
  19.     if _tableView.editing  
  20.     {  
  21.         _tableView.setEditing(false, animated: true)  
  22.     }else{  
  23.         _tableView.setEditing(true, animated: true)  
  24.     }  
  25.       
  26. }  

根据bool值返回结果

[html] view plaincopy
  1. //新增或者删除按钮的事件  
  2. func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {  
  3.     if  editingStyle==UITableViewCellEditingStyle.Insert  
  4.     {  
  5.         //此处判断为添加数据方法 在这里做相应的操作  
  6.         println("添加数据")  
  7.     }else if editingStyle==UITableViewCellEditingStyle.Delete {  
  8.         //此处为删除数据方法,在这里做相应的操作即可  
  9.         println("删除数据")  
  10.     }  
  11. }  



此时运行程序 两个按钮都试一下



添加和删除基本样子实现了。但是,我们发现点击每一行数据上的删除,和添加小图标之后是没有反应的。

这是因为还缺少一个tableView的代理方法

[html] view plaincopy
  1. //新增或者删除按钮的事件  
  2. func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {  
  3.     if  editingStyle==UITableViewCellEditingStyle.Insert  
  4.     {  
  5.         //此处判断为添加数据方法 在这里做相应的操作 此处如果修改了table的数据一定记得同步修改数据源  
  6.         println("添加数据")  
  7.     }else if editingStyle==UITableViewCellEditingStyle.Delete {  
  8.         //此处为删除数据方法,在这里做相应的操作即可 此处如果修改了table的数据一定记得同步修改数据源  
  9.         println("删除数据")  
  10.     }  
  11. }  

这时候我们再试试 是不是点击删除 或者添加之后有log出现了

具体操作大家自己试着写一写,我们这里就不细写了


说到这里。我们加一点特别说明。大家如果经常完qq的话会发现qq聊天列表页在左滑的时候也会出现类似的删除按钮,但是他还有一个置顶按钮

怎么让tableview出现两个按钮了 

其实也是一个简单的代理方法

[html] view plaincopy
  1. //table编辑状态下点击删除cell右侧设置多个按钮  
  2. func tableView(tableView: UITableView, editActionsForRowAtIndexPath indexPath: NSIndexPath) -> [AnyObject]? {  
  3.     let action1=UITableViewRowAction(style: UITableViewRowActionStyle.Default, title: "删除"){(action,indexPath)->Void in  
  4.         //点击删除调用  
  5.         println("点击了删除")  
  6.     }  
  7.       
  8.       
  9.     let action2=UITableViewRowAction(style: UITableViewRowActionStyle.Normal, title: "标记为未读"){(action,indexPath)->Void in  
  10.         //点击标记为未读调用  
  11.         println("标记为未读")  
  12.           
  13.     }  
  14.     let action3=UITableViewRowAction(style: UITableViewRowActionStyle.Default, title: "置顶"){(action,indexPath)->Void in  
  15.         //点击置顶调用  
  16.         println("点击了置顶")  
  17.           
  18.     }  
  19.       
  20.     return[action1,action2,action3]  
  21. }  

此处代理方法返回一个数组。数组里面有个几个UITableViewRowAction 就会出现几个按钮

0 0
原创粉丝点击