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)

            }

        }

}

你可能感兴趣的:(swift中UITableView的使用(编辑模式,增加模式,更改模式))