如何删除作为Dictionary Swift的TableViewCell

时间:2015-01-02 23:04:00

标签: ios xcode uitableview swift dictionary

我正在尝试使用滑动删除表格视图单元格,但我不能使用我在代码中标记的行,不知道为什么。我的单元格由字典制作,标题的键和细节的值。

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

   let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as UITableViewCell

    //Create the cell by the dictionary favDict
    for (key, value) in favDict{
        cell.textLabel?.text = key
        cell.detailTextLabel?.text = value
    }

    return cell
}

func tableView(tableView: UITableView!, canEditRowAtIndexPath indexPath: NSIndexPath!) -> Bool {
    return true
}

func tableView(tableView: UITableView!, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath!) {
    if editingStyle == UITableViewCellEditingStyle.Delete {
        favDict.removeAtIndex(indexPath!.row)// Line that is giving the error says Int is not convertible for [String: String]
        tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Automatic)
    }
}

决议:

import UIKit

class ViewController2: UIViewController, UITableViewDelegate {

    var dictKeys : [String]?

    @IBOutlet var tableView: UITableView!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        dictKeys = Array(favDict.keys)
    }

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


    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        dictKeys = Array(favDict.keys)
        return rowsInSec
    }



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


        let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as UITableViewCell
        var key = dictKeys?[indexPath.row]
        var data = favDict[key!]
        cell.textLabel?.text = key
        cell.detailTextLabel?.text = data

         return cell
    }


    func tableView(tableView: UITableView!, canEditRowAtIndexPath indexPath: NSIndexPath!) -> Bool {
        return true
    }

    func tableView(tableView: UITableView!, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath!) {
        if editingStyle == UITableViewCellEditingStyle.Delete
        {
            var key  = dictKeys?[indexPath.row]
            favDict.removeValueForKey(key!)
            dictKeys?.removeAtIndex(indexPath.row)
            rowsInSec--
            tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Automatic)
        }
        }
    }

1 个答案:

答案 0 :(得分:0)

你不能使用;

favDict.removeAtIndex(indexPath!.row)

removeAtIndexNSMutableArray的实例方法。要从字典中删除值,您可以使用:

favDict.removeValueForKey("yourkey")

修改

Dictionary相比,使用NSMutableArray删除和加载数据有点困难。你也在cellForRowAtIndexPath:中加了一个循环。它只会将最后一个对象加载到每个单元格。

如果您仍在寻找词典,您可以这样做:

实施以下方法:

var dictKeys : [Strings]?
override func viewDidLoad()
{
    super.viewDidLoad()
    dictKeys = Array(favDict.keys)
}

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

   let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as UITableViewCell
   var key  = dictKeys?[indexPath.row]
   var data = favDict[key!]
   cell.textLabel?.text = key
   cell.detailTextLabel?.text = data
   return cell
}

func tableView(tableView: UITableView!, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath!)
{
    if editingStyle == UITableViewCellEditingStyle.Delete
    {
        var key  = dictKeys?[indexPath.row]
        favDict.removeValueForKey(key!)
        dictKeys?.removeAtIndex(indexPath.row)
        tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Automatic)
    }
}