2015-10-27 29 views
0

好吧,所以我一直在爲此工作了幾天,而我嘗試過的一切都不起作用。原型單元中的UISwitch,只有多行引用最後一行。爲什麼

這裏是問題: 我有兩個原型單元格subclasses在我的UITableView第一個原型單元格有一個元素。第二個原型單元在每行中具有行數爲StringsUISwitch。我試圖將個人用戶影響UISwitch保存在NSUSerDefaults中。我有一個NSDictionary來存儲String and Bool這個字典存儲交換機的狀態作爲布爾。在超類中,我使用for loop遍歷字典,以便我可以評估UISwitch state。但問題是,當我將UISwitch翻轉到開啓位置時,字典會記錄UISwitch狀態,但將其引用到最後一個元素。

示例:

假設我在第二個原型中有四行。我將第0行的UISwitch翻轉爲開,記錄的行號是3(最後一個元素)。我知道這一點,因爲我在代碼中放置了一行打印每一次翻轉任何UISwitch時引用的行,而不管打印行返回最後一行的行是什麼。

不知道如何得到這個單獨引用,任何幫助表示讚賞。

這裏是我的代碼:

這是子類:

cellNumber = rowNumber 

     if mySwitch.on{ 

      savedItems["switchKey"] = true 

      print(cellNumber) 

     }else{ 

      savedItems["switchKey"] = false 


     } 
} 

這是超:

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 

    return objects.count + staticObjects.count 
} 

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

    if indexPath.row < staticObjects.count { 

     let staticCell = self.tableView.dequeueReusableCellWithIdentifier("staticCell", forIndexPath: indexPath) as! StaticTableViewCell 

     staticCell.staticTitleLabel.text = self.staticObjects.objectAtIndex(indexPath.row) as? String 


     return staticCell 

    } 

    else{ 

     let row = indexPath.row - staticObjects.count 

     let cell = self.tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! PillarTableViewCell 

     cell.titleLabel.text = self.objects.objectAtIndex(row) as? String 

     theSwitch = cell.mySwitch 

     rowNumber = indexPath.row 

     for (key,value) in savedItems{ 

      if value == true { 

       cell.mySwitch.setOn(true, animated: true) 
      } 

     } 
return cell 
} 

回答

1

你有一個簡單的錯誤:

rowNumber = indexPath.row 

這條線將保證rowNumber被設置爲索引路徑。實際上,它將被設置爲最後一個單元格的索引路徑。當通過cellForRowAtIndexPath請求第一個單元時,它被分配爲0,然後下一行被分配給1,等等。

你想要做的是爲每個開關分配一個標籤,等於電池:

cell.mySwitch.tag = indexPath.row 

然後重寫你的節電功能:

cellNumber = mySwitch.tag 

     if mySwitch.on{ 

      savedItems["switchKey"] = true 

      print(cellNumber) 

     }else{ 

      savedItems["switchKey"] = false 


     } 
} 
+0

非常感謝幫助我一噸,這已經打壓了我好幾天。我還有另外一個問題。 Dictionary I設置'savedItems [「switchKey」] = true'。它記錄每個交換機的值,它不會將行號與每個「UISwitch」相關聯,爲什麼?感謝您的幫助,我非常感謝您花時間。 – Rico

+0

@Rico爲什麼它會將這個值與每個單獨的開關相關聯? :)你有一本字典,你可以更新它的一個值。你總是更新SAME值,所以當然這會導致讀取相同的值。如果要存儲單個交換機的值,可以使用「switchKey \\(cellNumber)」作爲密鑰。 –

+0

絕對正確。我將字典更改爲'var savedItems = [Int:Bool]()',然後將'[cellNumber]'作爲關鍵字,以便爲每行創建一個鍵和布爾值。在你第一次幫助我之後,我昨天晚上正確地說了你的話。我很高興你讓我的關鍵價值與我一樣。所以現在我試圖在'false'關閉的情況下,基於'NSDicitionary'值'true'設置'UISwitch'。我正在嘗試'switch case'方法,但它似乎沒有工作。有什麼想法嗎?謝謝您的幫助。 – Rico

相關問題