对于每个选定的TableView Row,如何使Uibutton状态不同



在此代码中,我的按钮具有选定的状态和取消选择的状态。按下按钮后,它会更改为绿色,当再次按下时,它会更改为红色,以表示取消指定状态。

但是,所有这些都是在详细信息视图controller中,当我从tableview中选择特定行时,然后单击按钮显示绿色并返回并尝试其他行,该按钮在另一行上显示绿色,表示我've按下它(我没有)。我想知道是否有一种方法可以显示绿色,以详细说明我选择的行和红色为其他行?

 let defaults = UserDefaults.standard
// Outlets
@IBOutlet weak var goingButton: UIButton!
// Actions
@IBAction func goingButtonTapped(_ sender: UIButton) {
goingButton.isSelected = !goingButton.isSelected
if goingButton.isSelected == true {
    goingButton.setImage(UIImage(named: "goingSelected"), for: UIControlState.selected)
    defaults.set(true, forKey: "going")
    defaults.synchronize()
    defaults.bool(forKey: "going")
    print("defaults: (defaults)")
} else if goingButton.isSelected == false {
    goingButton.setImage(UIImage(named: "goingDeselected"), for: UIControlState.normal)
    defaults.set(false, forKey: "going")
    defaults.synchronize()
    defaults.bool(forKey: "going")
    }
}
override func viewDidLoad() {
super.viewDidLoad()
goingButton.setImage(UIImage(named: "goingDeselected"), for: UIControlState.normal)
if defaults.bool(forKey: "going")
{
    goingButton.isSelected = true
goingButton.setImage(UIImage(named: "goingSelected"), for: UIControlState.selected)
}
}

此问题是因为该按钮识别defaults UserDefault属性以设置自我显示方式,当您首次按下defaults设置为true时,以及返回按钮时仍然绿色(defaults仍然是正确的)

尝试以下操作:

func viewWillAppear(_ animated: Bool) {
    UserDefaults.standard.set(false, forKey: "going")
}

如果您有静态行,则需要一个用户默认每行的键来保留会话之间的按钮状态。如果您有很多行,则使用核心数据将在您的代码中更轻松,更清洁。

如果您的行是动态的,并且您只需要保存单个应用程序会话的按钮状态,请使用将行作为键和布尔值的字典用作值。每次重新加载表时,从字典中获取每行按钮的状态。

var buttonStates: [Int:Bool]

最新更新