2014-11-04 25 views
6

這是代碼:斯威夫特 - UITableView的didSelectRowAtIndexPath方法及didDeselectRowAtIndexPath添加和刪除indexPath標識

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    let selectedItem = items.objectAtIndex(indexPath.row) as String 
    let itemId = selectedItem.componentsSeparatedByString("$%^") 
    //itemId[1] - Item Id 
} 

func tableView(tableView: UITableView, didDeselectRowAtIndexPath indexPath: NSIndexPath) { 
    let selectedItem = items.objectAtIndex(indexPath.row) as String 
    let itemId = selectedItem.componentsSeparatedByString("$%^") 
    //itemId[1] - Item Id 
} 

如何添加項目標識「在數組或字符串否則......什麼」?例如,當您選擇行0,1,4,5時,您將不同的項目ID添加到「在數組或字符串中」,然後當我想取消選擇如何從indexPath.row中取消選擇精確項目ID並取消選擇它「在數組或字符串或其他東西...」並刪除它? 對不起,我蹩腳的英語,如果你有一個問題問意見,我會解釋,如果我能

+0

我需要在數組或字符串中搜索這個被取消選擇的ID,我想刪除它。 – 2014-11-04 16:54:32

回答

21

你可以做到這一點很簡單地通過增加Dictionary屬性,你的表視圖控制器:

class ViewController : UITableViewController { 
    var selectedItems: [String: Bool] = [:] 

    // ... 

    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
     let selectedItem = items.objectAtIndex(indexPath.row) as String 
     let itemId = selectedItem.componentsSeparatedByString("$%^") 
     // add to self.selectedItems 
     selectedItems[itemId[1]] = true 
    } 

    func tableView(tableView: UITableView, didDeselectRowAtIndexPath indexPath: NSIndexPath) { 
     let selectedItem = items.objectAtIndex(indexPath.row) as String 
     let itemId = selectedItem.componentsSeparatedByString("$%^") 
     // remove from self.selectedItems 
     selectedItems[itemId[1]] = nil 
    } 

    // can access the items as self.selectedItems.keys 
    func doSomething() { 
     for item in selectedItems.keys { 
      println(item) 
     } 
    } 
} 
+1

非常感謝! :) – 2014-11-04 18:05:14

+0

你有一個錯誤:) var selectedItems = Dictionary () – 2014-11-04 18:11:52

+0

完全正確 - 儘管我更喜歡'[String:Bool]'。 – 2014-11-04 18:12:42

2

對於Swift 3.0,使用

override func tableView(_ tableView: UITableView, didSelectRowAt 
indexPath: IndexPath){ 
    //your code... 
}