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

UItableView实现移动单元格

1,下面的样例是给表格UITableView添加单元格移动功能: 
  • (1)给表格添加长按功能,长按后表格进入编辑状态 
  • (2)在编辑状态下,可以看到单元格后面出现拖动按钮 
  • (3)鼠标按住拖动按钮,可以拖动单元格到任意位置
  • (4)拖动完毕后,还会触发TabelView对应的代理事件
 
2,效果图如下:
iOS开发——UI_swift篇&UItableView实现移动单元格  iOS开发——UI_swift篇&UItableView实现移动单元格
 
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 }

 

 

你可能感兴趣的:(UITableView)