UITableView的数据编辑功能

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

上一节地址:http://www.jb51.cc/article/p-dnutclku-bbr.html

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


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

类似如下界面:

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

          _tableView.setEditing(true,animated: true)


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

        //添加编辑按钮
        let btnEdit=UIButton(frame: CGRectMake(10,20,120,36))
        btnEdit.addTarget(self,action: "btnEditact:",forControlEvents: UIControlEvents.TouchDown)
        btnEdit.setTitle("删除",forState: UIControlState.normal)
        btnEdit.setTitleColor(UIColor.redColor(),forState: UIControlState.normal)
        self.view.addSubview(btnEdit)
        
        
        let btnEdit1=UIButton(frame: CGRectMake(150,36))
        btnEdit1.addTarget(self,action: "btnEditact1:",forControlEvents: UIControlEvents.TouchDown)
        btnEdit1.setTitle("添加",forState: UIControlState.normal)
        btnEdit1.setTitleColor(UIColor.redColor(),forState: UIControlState.normal)
        self.view.addSubview(btnEdit1)
        

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

    //删除按钮
    func btnEditact(sender:UIButton)
    {
        
        if _tableView.editing
        {
            _tableView.setEditing(false,animated: true)
        }else{
            _tableView.setEditing(true,animated: true)
        }
        
    }

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

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


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

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

    func tableView(tableView: UITableView,editingStyleForRowAtIndexPath  indexPath: NSIndexPath) ->UITableViewCellEditingStyle

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

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

    var isDelIns:Bool!
每次点击的时候设置删除按钮是设置为 true 点击添加按钮之后设置为false


    //删除按钮
    func btnEditact(sender:UIButton)
    {
        isDelIns=true
        
        if _tableView.editing
        {
            _tableView.setEditing(false,animated: true)
        }
        
    }
    
    //添加按钮
    func btnEditact1(sender:UIButton)
    {
        isDelIns=false
        if _tableView.editing
        {
            _tableView.setEditing(false,animated: true)
        }
        
    }

根据bool值返回结果

    //新增或者删除按钮的事件
    func tableView(tableView: UITableView,commitEditingStyle editingStyle: UITableViewCellEditingStyle,forRowAtIndexPath indexPath: NSIndexPath) {
        if  editingStyle==UITableViewCellEditingStyle.Insert
        {
            //此处判断为添加数据方法 在这里做相应的操作
            println("添加数据")
        }else if editingStyle==UITableViewCellEditingStyle.Delete {
            //此处为删除数据方法,在这里做相应的操作即可
            println("删除数据")
        }
    }
    



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



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

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

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

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

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


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

怎么让tableview出现两个按钮了

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

    //table编辑状态下点击删除cell右侧设置多个按钮
    func tableView(tableView: UITableView,editactionsForRowAtIndexPath indexPath: NSIndexPath) -> [AnyObject]? {
        let action1=UITableViewRowAction(style: UITableViewRowActionStyle.Default,title: "删除"){(action,indexPath)->Void in
            //点击删除调用
            println("点击了删除")
        }
        
        
        let action2=UITableViewRowAction(style: UITableViewRowActionStyle.normal,title: "标记为未读"){(action,indexPath)->Void in
            //点击标记为未读调用
            println("标记为未读")
            
        }
        let action3=UITableViewRowAction(style: UITableViewRowActionStyle.Default,title: "置顶"){(action,indexPath)->Void in
            //点击置顶调用
            println("点击了置顶")
            
        }
        
        return[action1,action2,action3]
    }

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

本节我们先讲到这里

下节我们尝试建立索引

下节地址:http://www.jb51.cc/article/p-eyctyczf-bbr.html


本节源代码我们会上传到qq群空间,欢迎下载

源码名称:TestTableViewSwift7.zip

苹果开发群2 :492222303 欢迎加入 欢迎讨论问题

Swift UITableView相关功能七的更多相关文章

  1. HTML5 input新增type属性color颜色拾取器的实例代码

    type 属性规定 input 元素的类型。本文较详细的给大家介绍了HTML5 input新增type属性color颜色拾取器的实例代码,感兴趣的朋友跟随脚本之家小编一起看看吧

  2. amazeui模态框弹出后立马消失并刷新页面

    这篇文章主要介绍了amazeui模态框弹出后立马消失并刷新页面,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  3. 移动HTML5前端框架—MUI的使用

    这篇文章主要介绍了移动HTML5前端框架—MUI的使用的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  4. AmazeUI 模态窗口的实现代码

    这篇文章主要介绍了AmazeUI 模态窗口的实现代码,代码简单易懂,非常不错,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  5. ios – UITableView和Cell Reuse

    这是我的CustomCell类的init方法解决方法如果没有要显示的图像,则必须清除图像视图:

  6. ios – 如何通过编程方式为UIButtons组设置单个背景图像

    解决方法要使用选择器数组以编程方式创建按钮,您可以使用以下代码片段://定义策略

  7. ios – UIButton背景图像以编程方式更改

    如何在点击事件中更改我的UIButton的背景图像?并使用上一张图片在几秒钟内刷新它?我的意思是在点击后更改它的背景图像并在点击后重置它.解决方法将您的clickEvent图像作为按钮的突出显示图像.

  8. ios – fetchedResultsController.fetchedObjects.count = 0但它充满了对象

    我正在使用相当标准的fetchedResultsController实现来输出tableView.在-viewDidLoad的最后,我正在进行第一次调用:这是我的fetchedResultsController:我的tableView方法:所以,问题是:在_fetchedResultsController.fetchedobjects.count的日志中等于0,但在视觉上tableView充满了对

  9. ios – UIPopoverController出现在错误的位置

    所以我花了一些时间寻找答案,但到目前为止还没有找到任何答案.我正在尝试从UIInputAccessoryView上的按钮呈现弹出窗口.UIBarButtonItem我想显示popover来自定制视图,所以我可以使用图像.我创建这样的按钮:当需要显示popover时,我这样做:但我得到的是:弹出窗口看起来很好,但它应该出现在第一个按钮上时出现在第二个按钮上.然后我发现了这个问题:UIBarButto

  10. ios – UITableView在滚动时阻止重新加载

    或者你能想象一个防止这种行为的好方法吗?解决方法抱歉,我没有足够的声誉来添加评论,因此在单独的答案中回答您的上一个问题.-performSelector:withObject:afterDelay:延迟为0.0秒不会立即执行给定的选择器,而是在当前的RunloopCycle结束后和给定的延迟之后执行它.-performSelector:withObject:添加到当前Runloop循环中并执行.这与直接调用该方法相同.因此,使用-performSelector:withObject:afterDelay:

随机推荐

  1. Swift UITextField,UITextView,UISegmentedControl,UISwitch

    下面我们通过一个demo来简单的实现下这些控件的功能.首先,我们拖将这几个控件拖到storyboard,并关联上相应的属性和动作.如图:关联上属性和动作后,看看实现的代码:

  2. swift UISlider,UIStepper

    我们用两个label来显示slider和stepper的值.再用张图片来显示改变stepper值的效果.首先,这三个控件需要全局变量声明如下然后,我们对所有的控件做个简单的布局:最后,当slider的值改变时,我们用一个label来显示值的变化,同样,用另一个label来显示stepper值的变化,并改变图片的大小:实现效果如下:

  3. preferredFontForTextStyle字体设置之更改

    即:

  4. Swift没有异常处理,遇到功能性错误怎么办?

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  5. 字典实战和UIKit初探

    ios中数组和字典的应用Applicationschedule类别子项类别名称优先级数据包contactsentertainment接触UIKit学习用Swift调用CocoaTouchimportUIKitletcolors=[]varbackView=UIView(frame:CGRectMake(0.0,0.0,320.0,CGFloat(colors.count*50)))backView

  6. swift语言IOS8开发战记21 Core Data2

    上一话中我们简单地介绍了一些coredata的基本知识,这一话我们通过编程来实现coredata的使用。还记得我们在coredata中定义的那个Model么,上面这段代码会加载这个Model。定义完方法之后,我们对coredata的准备都已经完成了。最后强调一点,coredata并不是数据库,它只是一个框架,协助我们进行数据库操作,它并不关心我们把数据存到哪里。

  7. swift语言IOS8开发战记22 Core Data3

    上一话我们定义了与coredata有关的变量和方法,做足了准备工作,这一话我们来试试能不能成功。首先打开上一话中生成的Info类,在其中引用头文件的地方添加一个@objc,不然后面会报错,我也不知道为什么。

  8. swift实战小程序1天气预报

    在有一定swift基础的情况下,让我们来做一些小程序练练手,今天来试试做一个简单地天气预报。然后在btnpressed方法中依旧增加loadWeather方法.在loadWeather方法中加上信息的显示语句:运行一下看看效果,如图:虽然显示出来了,但是我们的text是可编辑状态的,在storyboard中勾选Editable,再次运行:大功告成,而且现在每次单击按钮,就会重新请求天气情况,大家也来试试吧。

  9. 【iOS学习01】swift ? and !  的学习

    如果不初始化就会报错。

  10. swift语言IOS8开发战记23 Core Data4

    接着我们需要把我们的Rest类变成一个被coredata管理的类,点开Rest类,作如下修改:关键字@NSManaged的作用是与实体中对应的属性通信,BinaryData对应的类型是NSData,CoreData没有布尔属性,只能用0和1来区分。进行如下操作,输入类名:建立好之后因为我们之前写的代码有些地方并不适用于coredata,所以编译器会报错,现在来一一解决。

返回
顶部