2015-10-25 68 views
0

我有一個UITableView,它有兩個ProtoType單元和兩個獨立的TableViewCell子層級。在其中一個原型電池中,我有多個開關。用戶可以在表中選擇他們想要的項目,然後打開與該項目對應的開關。我希望能夠存儲UISwitch狀態,所以如果用戶導航並返回,他們將看到他們之前選擇的內容。在UITableView中存儲單獨的UISwitch狀態

我試圖在字典中存儲UISwitch狀態,然後在表重新加載時調用狀態。

這裏是我到目前爲止的代碼:

@IBAction func switchState(sender: AnyObject) { 

    if mySwitch.on{ 

     savedItems = NSMutableDictionary(object: mySwitch.on, forKey: "switchKey") 

     standardDefaults.setObject("On", forKey: "switchKey") 

    } 
    else{ 



     standardDefaults.setObject("Off", forKey: "switchKey") 

,然後這是在awakeNib部分:

override func awakeFromNib() { 
    super.awakeFromNib() 

    self.mySwitch.on = NSUserDefaults.standardUserDefaults().boolForKey("switchKey") 

    NSUserDefaults.standardUserDefaults().registerDefaults(["switchKey" : true]) 

} 

感謝您的幫助。

回答

1

你需要做的是:

有一個字典(或任何其它數據類型),是由完全相同的大小作爲數據源。

而在你

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

都需要在字典行indexPath.row然後mainpulate你的

注意,你的字典應該是靜態的

+0

因此,只是爲了澄清我應該在原型單元格子類中調用'重寫func tableView'並修改其中的單元格。正確?謝謝您的幫助。 – Rico

+0

沒有什麼William的意思是在你的'cellForRowAtIndexPath:'函數中,你需要檢查你想要設置的開關的字典狀態,然後將它設置爲存儲在字典中的內容。 – pbush25

+0

@Rico正如pbush所說 –

1

把我的答案在這裏,而不是評論,所以我可以更好地解釋一些事情。您需要有某種系統才能跟上哪個字典項對應哪個UISwitch。你最好的辦法可能是製作一本字典var uiDictionary = [String : Bool](),其中你的密鑰是一個你知道對應於特定開關的字符串。然後,在您的cellForRowAtIndexPath:中,您將嘗試訪問每個字典項目,檢查它是否是您嘗試設置的交換機的項目,然後進行設置。不知道你的確切設置,但它看起來像這樣...

func cellForRowAtIndexPath() { 
    //other stuff here 
    //now set your switches 

    for (key, value) in uiDictionary { 
     switch(key) { 
      case "Switch1": 
       if value == true { 
        cell?.switch1.setOn(true, animated: true) 
       } else { 
        cell?.switch1.setOn(false, animated: true) 
       } 
      break 
      case "Switch2": 
       if value == true { 
        cell?.switch1.setOn(true, animated: true) 
       } else { 
        cell?.switch1.setOn(false, animated: true) 
       } 
     } 

    } 

} 
+0

太棒了,這很有道理。感謝您的解釋,我會放棄並讓你知道。再次感謝。 – Rico

+0

我想知道這是否可能,因爲我創建了一個'NSDictionary'來存儲'bool'狀態。我知道它裏面有信息,因爲我打印出來了,它有它所需要的。但問題是我有四行和四個開關。當我存儲行值時,它總是返回到第4行。因此,當重新加載發生時,所有內容都打開,因爲每一行都引用了4.我不確定如何分隔行引用編號。因此,當我切換第一排時,我得到1,當我切換第二排時,我得到2等等。您怎麼看? – Rico

+0

您是否使用了我上面給出的代碼?我寫的內容將遍歷字典中的每個條目併爲該特定單元格設置適當的開關,並且可用於多個單元格。 – pbush25