swift中UITableView的使用(编辑模式,增加模式,更改模式)

https://github.com/potato512/SYSwiftLearning

override func viewDidLoad() {

        super.viewDidLoad()

        // Do any additional setup after loading the view.


        self.navigationItem.title = "editTable"


        // 切换列表的编辑模式

        // 方法1 自定义按钮

//        let editButton = UIButton(type: .Custom)

//        editButton.frame = CGRectMake(0.0, 0.0, 60.0, 40.0)

//        editButton.setTitle("edit", forState: .Normal)

//        editButton.setTitleColor(UIColor.blackColor(), forState: .Normal)

//        editButton.selected = false

//        editButton.addTarget(self, action: Selector("editClick:"), forControlEvents: .TouchUpInside)

//        self.navigationItem.rightBarButtonItem = UIBarButtonItem(customView: editButton)

        // 方法2 系统按钮

        self.navigationItem.rightBarButtonItem = self.editButtonItem()


        self.setLocalData()

        self.setUI()

}

// MARK: - 数据

func setLocalData()

{

        self.mainArray = NSMutableArray()


        for number in 1...10

        {

            let numberTmp = random() % 1000 + number

            self.mainArray.addObject(String(numberTmp))

        }

}

// MARK: - 视图

func setUI()

{

        self.mainTableView = UITableView(frame: self.view.bounds, style: .Plain)

        self.view.addSubview(self.mainTableView)

        self.mainTableView.backgroundColor = UIColor.clearColor()

        self.mainTableView.delegate = self

        self.mainTableView.dataSource = self

        self.mainTableView.autoresizingMask = UIViewAutoresizing.FlexibleHeight

        self.mainTableView.tableFooterView = UIView()

}

// MARK: - click

func editClick(button:UIButton)

{

        // 进入编辑模式,或退出编辑模式

        // 方式1

//        self.mainTableView.editing = !self.mainTableView.editing

//       

//        button.setTitle((self.mainTableView.editing ? "done" : "edit"), forState: .Normal)


        // 方法2

        button.selected = !button.selected

        self.mainTableView.setEditing(button.selected, animated: true)


        button.setTitle((button.selected ? "done" : "edit"), forState: .Normal)

}

// 进入编辑模式(结合导航栏编辑按钮使用:self.navigationItem.rightBarButtonItem = self.editButtonItem())

override func setEditing(editing: Bool, animated: Bool) {

        super.setEditing(editing, animated: animated)

        self.mainTableView.setEditing(editing, animated: true)

}

// MARK: - UITableViewDataSource, UITableViewDelegate

func numberOfSectionsInTableView(tableView: UITableView) -> Int {

        return 1

    }


    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

        return self.mainArray.count

}


func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

        var cell:UITableViewCell! = tableView.dequeueReusableCellWithIdentifier("UITableViewCell")

        if cell == nil

        {

            cell = UITableViewCell(style: .Default, reuseIdentifier: "UITableViewCell")

        }


        let text = self.mainArray[indexPath.row] as! String

        cell.textLabel!.text = text


        return cell

}


func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

        tableView.deselectRowAtIndexPath(indexPath, animated: true)

}

// MARK: - cell编辑

//    func tableView(tableView: UITableView, editActionsForRowAtIndexPath indexPath: NSIndexPath) -> [UITableViewRowAction]? {

//       

//    }


//    func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool {

//        return true

//    }


// MARK: 删除,或插入

// cell的编辑样式

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

        if indexPath.row == self.mainArray.count - 1

        {

            // 最后一个时插入

            return UITableViewCellEditingStyle.Insert

        }

        else if indexPath.row == 0

        {

            // 第一个没有编辑模式

            return UITableViewCellEditingStyle.None

        }


        // 其他cell为删除的编辑模式(设置tableView的editing属性进行删除操作;或左滑cell进行删除操作)

        return UITableViewCellEditingStyle.Delete

}


// cell的删除编辑样式下按钮标题

func tableView(tableView: UITableView, titleForDeleteConfirmationButtonForRowAtIndexPath indexPath: NSIndexPath) -> String? {

        return "删除"

}


// cell的编辑响应

func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {


        if (editingStyle == UITableViewCellEditingStyle.Delete)

        {

            // 删除数据方法1(先删除数据,再重新加载全部数据)

//            self.mainArray.removeObjectAtIndex(indexPath.row)

//            self.mainTableView.reloadData()


            // 删除数据方法2(先删除数据,再删除cell)

            self.mainArray.removeObjectAtIndex(indexPath.row)

            self.mainTableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.None)

        }

        else if (editingStyle == UITableViewCellEditingStyle.Insert)

        {

            // 添加数据方法1(先添加数据,再重新加载全部数据)

//            self.mainArray.addObject("添加数据")

//            self.mainTableView.reloadData()


            // 添加数据方法2(先添加数据,再添加cell)

            self.mainArray.addObject("添加数据")

            self.mainTableView.insertRowsAtIndexPaths([NSIndexPath(forRow: (self.mainArray.count - 1), inSection: 0)], withRowAnimation: UITableViewRowAnimation.None)

        }

}

// MARK: 移动(注意:两个代理方法必须同时实现)


// cell可移动

func tableView(tableView: UITableView, canMoveRowAtIndexPath indexPath: NSIndexPath) -> Bool {

        return true

}


// 移动cell事件

func tableView(tableView: UITableView, moveRowAtIndexPath fromIndexPath: NSIndexPath, toIndexPath: NSIndexPath) {


        if fromIndexPath != toIndexPath

        {

            // 获取移动行对应的值

            let itemValue = self.mainArray[fromIndexPath.row]

            // 删除移动的值

            self.mainArray.removeObjectAtIndex(fromIndexPath.row)


            // 如果移动区域大于现有行数,直接在最后添加移动的值

            if toIndexPath.row > self.mainArray.count

            {

                self.mainArray.addObject(itemValue)

            }

            else

            {

                // 没有超过最大行数,则在目标位置添加刚才删除的值

                self.mainArray.insertObject(itemValue, atIndex:toIndexPath.row)

            }

        }

}

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343

推荐阅读更多精彩内容

  • 需要注意: 重命名表的SQL格式为ALTER TABLE RENAME TO; 导入新数据的insert into...
    Ten_Minutes阅读 293评论 0 1
  • 女儿十三岁了,亭亭玉立,可以穿老婆的鞋子和衣服了,好像突然一下子就长大了,我还没准备好,心里还是那个可以蹲在电动...
    良衫薄阅读 520评论 1 7
  • 昨晚还是到12点睡觉,早上8点起床,因为下雨,坐地铁上班,还是迟到。今天第一天来了例假,下午没去练瑜伽,请大...
    nana0575阅读 105评论 0 0
  • 1.生活因我而闪亮 赵伊纯 我,只是一盏灯,一盏普普通通、平平凡凡的夜灯。 她,在旅游...
    听语堂阅读 1,578评论 0 6
  • 2016年10月17日,随着长征2F遥十一运载火箭喷出浓烈的尾焰。神舟十一号缓缓升空,2...
    清风烟雨笑阅读 1,384评论 2 6