Tableview控制器如何添加编辑按钮以重新排列行IOS Swift 2

时间:2016-05-15 23:52:01

标签: ios uitableview swift2

请找到下面的代码,我需要在tableviewcontroller视图顶部的编辑按钮,它可以重新排列或删除行。任何帮助将不胜感激。我找到了一个内置函数来删除单个行,但我特别需要一个编辑按钮。

    import UIKit

    class TableViewController: UITableViewController {
        var sports:[Sport] = []
        override func viewDidLoad() {
            loadData()
            super.viewDidLoad()

            // Uncomment the following line to preserve selection between presentations
            // self.clearsSelectionOnViewWillAppear = false

            // Uncomment the following line to display an Edit button in the navigation bar for this view controller.
            // self.navigationItem.rightBarButtonItem = self.editButtonItem()
        }
        func loadData(){




            if let path = NSBundle.mainBundle().pathForResource("data", ofType: "plist"){
                if let tempDict = NSDictionary(contentsOfFile: path){
                    let tempArray = (tempDict.valueForKey("sports") as! NSArray) as Array
                    for dict in tempArray {

                        let sportName = dict["sportName"]! as! String

                        let numberOfPlayers = dict["numberOfPlayers"]! as! String

                        let countryOfOrigin = dict["countryOfOrigin"]! as! String


                        let p = Sport(sportName: sportName, numberOfPlayers:numberOfPlayers, countryOfOrigin:countryOfOrigin)
                        sports.append(p)
                    }
                }

            }
        }
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
            // Dispose of any resources that can be recreated.
        }

        // MARK: - Table view data source

        override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
            // #warning Incomplete implementation, return the number of sections
            return 1
        }

        override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
            // #warning Incomplete implementation, return the number of rows
            return sports.count
        }


        override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
            let cell = tableView.dequeueReusableCellWithIdentifier("myCell", forIndexPath: indexPath)
            var sport = sports[indexPath.row]

            cell.textLabel?.text = sport.getSportName()
            cell.detailTextLabel?.text = sport.getCountryOfOrigin()

            // Configure the cell...

            return cell
        }


        /*
        // Override to support conditional editing of the table view.
        override func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool {
            // Return false if you do not want the specified item to be editable.
            return true
        }
        */

        /*
        // Override to support editing the table view.
        override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
            if editingStyle == .Delete {
                // Delete the row from the data source
                tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)
            } else if editingStyle == .Insert {
                // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
            }    
        }
        */

        /*
        // Override to support rearranging the table view.
        override func tableView(tableView: UITableView, moveRowAtIndexPath fromIndexPath: NSIndexPath, toIndexPath: NSIndexPath) {

        }
        */

        /*
        // Override to support conditional rearranging of the table view.
        override func tableView(tableView: UITableView, canMoveRowAtIndexPath indexPath: NSIndexPath) -> Bool {
            // Return false if you do not want the item to be re-orderable.
            return true
        }
        */

        /*
        // MARK: - Navigation

        // In a storyboard-based application, you will often want to do a little preparation before navigation
        override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
            // Get the new view controller using segue.destinationViewController.
            // Pass the selected object to the new view controller.
        }
        */
        override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
            let sport = sports[indexPath.row]
            let detailVC = SportsDetailVC(style: .Grouped)
    //        detailVC.title = park.title
            detailVC.sport = sport
    //        detailVC.zoomDelegate = mapVC
            navigationController?.pushViewController(detailVC, animated: true)

        }

    }


import UIKit

class SportsDetailVC: UITableViewController {
    var sport:Sport!
    override func viewDidLoad() {
        super.viewDidLoad()

        // Uncomment the following line to preserve selection between presentations
        // self.clearsSelectionOnViewWillAppear = false

        // Uncomment the following line to display an Edit button in the navigation bar for this view controller.
        // self.navigationItem.rightBarButtonItem = self.editButtonItem()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    // MARK: - Table view data source

    override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        // #warning Incomplete implementation, return the number of sections
        return 1
    }

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        // #warning Incomplete implementation, return the number of rows
        return 1
    }


    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        var cell = tableView.dequeueReusableCellWithIdentifier("reuseIdentifier")
        if cell == nil{
            cell = UITableViewCell(style: .Default, reuseIdentifier:"resuseIdentifier")
        }
        cell?.textLabel?.text = sport.getNumberOfPlayers()
        // Configure the cell...

        return cell!
    }


    /*
    // Override to support conditional editing of the table view.
    override func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool {
        // Return false if you do not want the specified item to be editable.
        return true
    }
    */

    /*
    // Override to support editing the table view.
    override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
        if editingStyle == .Delete {
            // Delete the row from the data source
            tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)
        } else if editingStyle == .Insert {
            // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
        }    
    }
    */

    /*
    // Override to support rearranging the table view.
    override func tableView(tableView: UITableView, moveRowAtIndexPath fromIndexPath: NSIndexPath, toIndexPath: NSIndexPath) {

    }
    */

    /*
    // Override to support conditional rearranging of the table view.
    override func tableView(tableView: UITableView, canMoveRowAtIndexPath indexPath: NSIndexPath) -> Bool {
        // Return false if you do not want the item to be re-orderable.
        return true
    }
    */

    /*
    // MARK: - Navigation

    // In a storyboard-based application, you will often want to do a little preparation before navigation
    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        // Get the new view controller using segue.destinationViewController.
        // Pass the selected object to the new view controller.
    }
    */

}

2 个答案:

答案 0 :(得分:0)

生成的代码包含以下注释:

personData = jsonResult["people"] as! NSMutableArray

取消注释第二行:

// Uncomment the following line to display an Edit button in the navigation bar for this view controller.
// self.navigationItem.rightBarButtonItem = self.editButtonItem()

您可能还需要实现一些其他委托函数才能使功能起作用:

self.navigationItem.rightBarButtonItem = self.editButtonItem()

例如,除非您实施适当的委托方法,否则您点按/按住以重新排序项目时右侧的小栏将无法使用。

答案 1 :(得分:0)

请仔细阅读以下链接中的教程。它包含您的问题的完整答案。它基于swift 2.0

How to delete & reorder rows uitableview in iOS Swift

相关问题