码迷,mamicode.com
首页 > 移动开发 > 详细

iOS开发——UI_swift篇&UItableView实现移动单元格

时间:2015-07-24 22:11:03      阅读:178      评论:0      收藏:0      [点我收藏+]

标签:

UItableView实现移动单元格

1,下面的样例是给表格UITableView添加单元格移动功能: 
  • (1)给表格添加长按功能,长按后表格进入编辑状态 
  • (2)在编辑状态下,可以看到单元格后面出现拖动按钮 
  • (3)鼠标按住拖动按钮,可以拖动单元格到任意位置
  • (4)拖动完毕后,还会触发TabelView对应的代理事件
 
2,效果图如下:
技术分享 技术分享
 
3,代码如下
 1 import UIKit
 2  
 3 class ViewController: UIViewController,UITableViewDelegate,
 4     UITableViewDataSource,UIGestureRecognizerDelegate {
 5      
 6     var tableView:UITableView?
 7      
 8     var ctrlnames:[String] = ["UILabel 标签","UIButton 按钮","UIDatePiker 日期选择器",
 9         "UITableView 表格视图"]
10      
11     override func viewDidLoad() {
12         super.viewDidLoad()
13          
14         //创建表视图
15         self.tableView = UITableView(frame: UIScreen.mainScreen().applicationFrame,
16             style:UITableViewStyle.Plain)
17         self.tableView!.delegate = self
18         self.tableView!.dataSource = self
19         //创建一个重用的单元格
20         self.tableView!.registerClass(UITableViewCell.self, forCellReuseIdentifier: "SwiftCell")
21         self.view.addSubview(self.tableView!)
22          
23         //绑定对长按的响应
24         var longPress =  UILongPressGestureRecognizer(target:self,
25             action:Selector("tableviewCellLongPressed:"))
26         //代理
27         longPress.delegate = self
28         longPress.minimumPressDuration = 1.0
29         //将长按手势添加到需要实现长按操作的视图里
30         self.tableView!.addGestureRecognizer(longPress)
31     }
32      
33     //在本例中,只有一个分区
34     func numberOfSectionsInTableView(tableView: UITableView!) -> Int {
35         return 1;
36     }
37      
38     //返回表格行数(也就是返回控件数)
39     func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
40         return self.ctrlnames.count
41     }
42      
43     //创建各单元显示内容(创建参数indexPath指定的单元)
44     func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath)
45         -> UITableViewCell
46     {
47         //为了提供表格显示性能,已创建完成的单元需重复使用
48         let identify:String = "SwiftCell"
49         //同一形式的单元格重复使用,在声明时已注册
50         let cell = tableView.dequeueReusableCellWithIdentifier(identify, forIndexPath: indexPath)
51             as UITableViewCell
52         cell.accessoryType = UITableViewCellAccessoryType.DisclosureIndicator
53         cell.textLabel?.text = self.ctrlnames[indexPath.row]
54         return cell
55     }
56      
57     //长按表格
58     func tableviewCellLongPressed(gestureRecognizer:UILongPressGestureRecognizer)
59     {
60         if (gestureRecognizer.state == UIGestureRecognizerState.Ended)
61         {
62             println("UIGestureRecognizerStateEnded");
63             //在正常状态和编辑状态之间切换
64             if(self.tableView!.editing == false){
65                 self.tableView!.setEditing(true, animated:true)
66             }
67             else{
68                 self.tableView!.setEditing(false, animated:true)
69             }
70         }
71     }
72      
73     //在编辑状态,可以拖动设置cell位置
74     func tableView(tableView: UITableView, canMoveRowAtIndexPath indexPath: NSIndexPath) -> Bool {
75         return true
76     }
77      
78     //移动cell事件
79     func tableView(tableView: UITableView, moveRowAtIndexPath fromIndexPath: NSIndexPath,
80         toIndexPath: NSIndexPath) {
81         if fromIndexPath != toIndexPath{
82             //获取移动行对应的值
83             var itemValue:String = ctrlnames[fromIndexPath.row]
84             //删除移动的值
85             ctrlnames.removeAtIndex(fromIndexPath.row)
86             //如果移动区域大于现有行数,直接在最后添加移动的值
87             if toIndexPath.row > ctrlnames.count{
88                 ctrlnames.append(itemValue)
89             }else{
90                 //没有超过最大行数,则在目标位置添加刚才删除的值
91                 ctrlnames.insert(itemValue, atIndex:toIndexPath.row)
92             }
93         }
94     }
95 }

 

 

iOS开发——UI_swift篇&UItableView实现移动单元格

标签:

原文地址:http://www.cnblogs.com/iCocos/p/4674721.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!