UItableView实现移动单元格

 
1,下面的样例是给表格UITableView添加单元格移动功能:

  • (1)给表格添加长按功能,长按后表格进入编辑状态
  • (2)在编辑状态下,可以看到单元格后面出现拖动按钮
  • (3)鼠标按住拖动按钮,可以拖动单元格到任意位置
  • (4)拖动完毕后,还会触发TabelView对应的代理事件
 
2,效果图如下:
 
 
3,代码如下
 import UIKit

 class ViewController: UIViewController,UITableViewDelegate,
     UITableViewDataSource,UIGestureRecognizerDelegate {

     var tableView:UITableView?

     var ctrlnames:[String] = ["UILabel 标签","UIButton 按钮","UIDatePiker 日期选择器",
         "UITableView 表格视图"]

     override func viewDidLoad() {
         super.viewDidLoad()

         //创建表视图
         self.tableView = UITableView(frame: UIScreen.mainScreen().applicationFrame,
             style:UITableViewStyle.Plain)
         self.tableView!.delegate = self
         self.tableView!.dataSource = self
         //创建一个重用的单元格
         self.tableView!.registerClass(UITableViewCell.self, forCellReuseIdentifier: "SwiftCell")
         self.view.addSubview(self.tableView!)

         //绑定对长按的响应
         var longPress =  UILongPressGestureRecognizer(target:self,
             action:Selector("tableviewCellLongPressed:"))
         //代理
         longPress.delegate = self
         longPress.minimumPressDuration = 1.0
         //将长按手势添加到需要实现长按操作的视图里
         self.tableView!.addGestureRecognizer(longPress)
     }

     //在本例中,只有一个分区
     func numberOfSectionsInTableView(tableView: UITableView!) -> Int {
         ;
     }

     //返回表格行数(也就是返回控件数)
     func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
         return self.ctrlnames.count
     }

     //创建各单元显示内容(创建参数indexPath指定的单元)
     func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath)
         -> UITableViewCell
     {
         //为了提供表格显示性能,已创建完成的单元需重复使用
         let identify:String = "SwiftCell"
         //同一形式的单元格重复使用,在声明时已注册
         let cell = tableView.dequeueReusableCellWithIdentifier(identify, forIndexPath: indexPath)
             as UITableViewCell
         cell.accessoryType = UITableViewCellAccessoryType.DisclosureIndicator
         cell.textLabel?.text = self.ctrlnames[indexPath.row]
         return cell
     }

     //长按表格
     func tableviewCellLongPressed(gestureRecognizer:UILongPressGestureRecognizer)
     {
         if (gestureRecognizer.state == UIGestureRecognizerState.Ended)
         {
             println("UIGestureRecognizerStateEnded");
             //在正常状态和编辑状态之间切换
             if(self.tableView!.editing == false){
                 self.tableView!.setEditing(true, animated:true)
             }
             else{
                 self.tableView!.setEditing(false, animated:true)
             }
         }
     }

     //在编辑状态,可以拖动设置cell位置
     func tableView(tableView: UITableView, canMoveRowAtIndexPath indexPath: NSIndexPath) -> Bool {
         return true
     }

     //移动cell事件
     func tableView(tableView: UITableView, moveRowAtIndexPath fromIndexPath: NSIndexPath,
         toIndexPath: NSIndexPath) {
         if fromIndexPath != toIndexPath{
             //获取移动行对应的值
             var itemValue:String = ctrlnames[fromIndexPath.row]
             //删除移动的值
             ctrlnames.removeAtIndex(fromIndexPath.row)
             //如果移动区域大于现有行数,直接在最后添加移动的值
             if toIndexPath.row > ctrlnames.count{
                 ctrlnames.append(itemValue)
             }else{
                 //没有超过最大行数,则在目标位置添加刚才删除的值
                 ctrlnames.insert(itemValue, atIndex:toIndexPath.row)
             }
         }
     }
 }
 

iOS开发——UI_swift篇&UItableView实现移动单元格的更多相关文章

  1. iOS开发UI篇—简单介绍静态单元格的使用

    iOS开发UI篇—简单介绍静态单元格的使用 一.实现效果与说明 说明:观察上面的展示效果,可以发现整个界面是由一个tableview来展示的,上面的数据都是固定的,且几乎不会改变. 要完成上面的效果, ...

  2. iOS开发——UI_swift篇&UITableView实现单元格展开与隐藏

    UITableView实现单元格展开与隐藏  关于UITableView的展开的收缩在前面的文章我已经结束,就是使用代理,通知,block传值的时候实现的,当时是使用一个Bool值来实现,最后使用着三 ...

  3. iOS开发——UI_swift篇&UITableView实现索引功能

    UITableView实现索引功能     关于UItableView的索引在平时项目中所见不多,最多的就是跟联系人有关的界面,虽然如此,但是作为一个swift开发的程序必须知道的一个技术点,所以今天 ...

  4. iOS开发UI篇—UITableview控件简单介绍

    iOS开发UI篇—UITableview控件简单介绍 一.基本介绍 在众多移动应⽤用中,能看到各式各样的表格数据 . 在iOS中,要实现表格数据展示,最常用的做法就是使用UITableView,UIT ...

  5. iOS开发UI篇—UITableview控件基本使用

    iOS开发UI篇—UITableview控件基本使用 一.一个简单的英雄展示程序 NJHero.h文件代码(字典转模型) #import <Foundation/Foundation.h> ...

  6. iOS开发UI篇—UITableview控件使用小结

    iOS开发UI篇—UITableview控件使用小结 一.UITableview的使用步骤 UITableview的使用就只有简单的三个步骤: 1.告诉一共有多少组数据 方法:- (NSInteger ...

  7. iOS开发——UI_swift篇&TableView实现页眉和页脚

    TableView实现页眉和页脚   在UItableView中header和footer是很常见的,而且他能让你实现很复杂的功能,我们见过最多的就是下拉刷新和上啦加载更多,当然你还可以在上面添加一个 ...

  8. iOS开发——UI_swift篇&TableView自定义聊天界面

    TableView自定义聊天界面   1,下面是一个放微信聊天界面的消息展示列表,实现的功能有: (1)消息可以是文本消息也可以是图片消息 (2)消息背景为气泡状图片,同时消息气泡可根据内容自适应大小 ...

  9. iOS开发UI篇—在UITableview的应用中使用动态单元格来完成app应用程序管理界面的搭建

    iOS开发UI篇—在UITableview的应用中使用动态单元格来完成app应用程序管理界面的搭建 一.实现效果 说明:该示例在storyboard中使用动态单元格来完成. 二.实现 1.项目文件结构 ...

随机推荐

  1. 【Windows核心编程】VirtualAlloc 例子

    // VirtualAlloc.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <Windows.h> #in ...

  2. char[]数组与char *指针的区别

    char[]数组与char *指针的区别 问题描述 虽然很久之前有看过关于char指针和char数组的区别,但是当时没有系统的整理,到现在频繁遇到,在string,char[], char *中迷失了 ...

  3. 自学hadoop(二)

    1)NameNode为主  DataNode为从 2)JobTracker为主 TaskTracker为从 3)开启调试模式 export HADOOP_ROOT_LOGGER=DEBUG,conso ...

  4. PHP+Apache+MySQL+phpMyAdmin在win7系统下的环境配置

    配置方法在网上可以搜到很多,一步步来就好了,但是由于步骤比较多,需要耐心仔细一点点,这是我自己记录的成功步骤: 1.PHP+Apache+MySQL的安装:PHP网站开发 2.phpMyAdmin的配 ...

  5. iOS完结篇

    从去年自己陆陆续续接触iOS开发,几个月过去了,对于苹果的体验,流程,以及规范都有了一定的认 识,还会定期关注iOS的发展. 即将要做win10系统了,为了纪念把自己的虚拟机截图留念吧.也希望微软能在 ...

  6. 分类算法之朴素贝叶斯分类(Naive Bayesian Classification)

    1.什么是分类 分类是一种重要的数据分析形式,它提取刻画重要数据类的模型.这种模型称为分类器,预测分类的(离散的,无序的)类标号.例如医生对病人进行诊断是一个典型的分类过程,医生不是一眼就看出病人得了 ...

  7. STL学习系列三:Deque容器

    1.Deque简介 deque是“double-ended queue”的缩写,和vector一样都是STL的容器,deque是双端数组,而vector是单端的. deque在接口上和vector非常 ...

  8. POJ Wormholes (SPFA)

    http://poj.org/problem?id=3259 Description While exploring his many farms, Farmer John has discovere ...

  9. Codeforces 622B The Time 【水题】

    B. The Time time limit per test 1 second memory limit per test 256 megabytes input standard input ou ...

  10. LINUX下成功搭建SVN

    步骤如下: 1: yum install -y subversion 2:svnserve –version 3: [root@singledb ~]# mkdir /u02/svn [root@si ...