好吧,所以我一直在爲此工作了幾天,而我嘗試過的一切都不起作用。原型單元中的UISwitch,只有多行引用最後一行。爲什麼
這裏是問題: 我有兩個原型單元格subclasses
在我的UITableView
第一個原型單元格有一個元素。第二個原型單元在每行中具有行數爲Strings
和UISwitch
。我試圖將個人用戶影響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
}
非常感謝幫助我一噸,這已經打壓了我好幾天。我還有另外一個問題。 Dictionary I設置'savedItems [「switchKey」] = true'。它記錄每個交換機的值,它不會將行號與每個「UISwitch」相關聯,爲什麼?感謝您的幫助,我非常感謝您花時間。 – Rico
@Rico爲什麼它會將這個值與每個單獨的開關相關聯? :)你有一本字典,你可以更新它的一個值。你總是更新SAME值,所以當然這會導致讀取相同的值。如果要存儲單個交換機的值,可以使用「switchKey \\(cellNumber)」作爲密鑰。 –
絕對正確。我將字典更改爲'var savedItems = [Int:Bool]()',然後將'[cellNumber]'作爲關鍵字,以便爲每行創建一個鍵和布爾值。在你第一次幫助我之後,我昨天晚上正確地說了你的話。我很高興你讓我的關鍵價值與我一樣。所以現在我試圖在'false'關閉的情況下,基於'NSDicitionary'值'true'設置'UISwitch'。我正在嘗試'switch case'方法,但它似乎沒有工作。有什麼想法嗎?謝謝您的幫助。 – Rico