我有一個問題,我解釋。切換到UserDefaults的桌面視圖,幾個被自己激活
我想激活一個開關,並且可以在tableView中打開應用程序。
爲此,我將標籤保存在NSUserDefault中,如果應用程序打開時標籤位於NSUserDefailt中,它將激活開關。
問題是,在下面的圖片中,我只是打開開關A和B,但當我scrool其他開關激活爲q,s,c但從來不相同。
你有想法建議我嗎? 我但我的代碼與控制檯下面。
的ViewController:
@IBOutlet weak var tableView_t: UITableView!
let station = ["A","B","C","D","E","F","G","H","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","&","é","("]
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
{
let cell = tableView.dequeueReusableCell(withIdentifier: "cell") as? TableViewCell
cell?.configCell(station[indexPath.item])
return cell!
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
{
return station.count
}
TableViewCell:
@IBOutlet weak var switch_t: UISwitch!
@IBOutlet weak var label_t: UILabel!
func configCell(_ labels : String)
{
label_t.text = labels
if let sav = UserDefaults.standard.value(forKey: "switch") as? [String]
{
print(sav)
for switchs in sav
{
print(switchs)
if switchs == labels
{
switch_t.setOn(true, animated: false)
print("On")
}
}
}
}
@IBAction func actionSwitch(_ sender: Any)
{
var sav : [String] = []
if let saving = UserDefaults.standard.value(forKey: "switch") as? [String]
{
sav = saving
}
if switch_t.isOn
{
sav.append(label_t.text!)
UserDefaults.standard.set(sav, forKey: "switch")
print(sav)
}
else
{
var number = 0
for s in sav
{
if s == label_t.text
{
sav.remove(at: number)
UserDefaults.standard.set(sav, forKey: "switch")
}
number += 1
print(sav)
}
}
}
控制檯:
[ 「A」, 「B」] 甲 在 乙 [ 「A」, 「B」] 甲 乙 論 [ 「A」,「B 「] 甲 乙 [」 A」, 「B」] 甲 乙 [ 「A」, 「B」] 甲 乙 [ 「A」, 「B」] 甲 乙 [ 「 A」, 「B」] 甲 乙 [ 「A」, 「B」] 甲 乙 [ 「A」, 「B」] 甲 乙 [ 「A」, 「B」] 甲 乙 [ 「A」, 「B」] 甲 乙 [ 「A」, 「B」] 甲 乙 [ 「A」, 「B」] 甲 乙 [ 「A」 ,「B」] A B [「A」,「B」] A B [「A 「,」B「] A B
因爲細胞被重用,你可以嘗試添加其他'{switch_t.setOff(真,動畫:假)}'。基本上他們記得重用時的狀態。 – JuicyFruit