自定义图文单选按钮视图:控制器加载时如何恢复已保存选中状态?
恢复自定义单选按钮的已保存选中状态
很简单,咱们可以分两步来实现:保存选中状态和控制器加载时恢复状态,结合你现有的代码调整就行:
第一步:在点击时保存选中状态
先修改你现有的genderTapped方法,每次选中按钮时把状态存起来(用UserDefaults是最常用的轻量存储方式)。假设你的自定义单选按钮有个区分标识,比如gender属性(字符串类型,比如"male"/"female"),或者用tag值也行:
@objc private func genderTapped(_ sender: UITapGestureRecognizer) { guard let tappedButton = sender.view as? YourCustomRadioButtonClass else { return } for button in genderButtons { let isSelected = button == tappedButton button.select(isSelected) // 选中时保存状态 if isSelected { // 这里替换成你实际用来区分按钮的标识 UserDefaults.standard.set(tappedButton.gender, forKey: "selectedGender") // 如果用tag的话就改成: // UserDefaults.standard.set(tappedButton.tag, forKey: "selectedGenderTag") } } }
第二步:控制器加载时恢复状态
在控制器的viewDidLoad(或者viewWillAppear,如果需要每次页面出现都恢复的话)里,读取之前保存的状态,然后找到对应的按钮设置为选中:
override func viewDidLoad() { super.viewDidLoad() // 先初始化你的手势(就是你原来的那段代码) for button in genderButtons { button.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(genderTapped(_:)))) } // 恢复选中状态 let savedGender = UserDefaults.standard.string(forKey: "selectedGender") // 如果用tag的话: // let savedTag = UserDefaults.standard.integer(forKey: "selectedGenderTag") for button in genderButtons { // 匹配保存的标识,设置选中 if button.gender == savedGender { button.select(true) break // 单选按钮,找到后直接跳出循环就行 } // tag版本的判断: // if button.tag == savedTag { // button.select(true) // break // } } }
小提醒
- 要确保你的自定义按钮的
select(_:)方法能正确更新UI(比如切换选中/未选中的图片、文字颜色这些) - 如果你的
genderButtons是IBOutlet集合,要确认在viewDidLoad时已经正确关联了所有按钮 UserDefaults是轻量存储,适合这种简单的状态保存;如果是更复杂的数据,再考虑用Core Data或者其他存储方式
内容的提问来源于stack exchange,提问作者Cody Harness
相关产品推荐
相关产品推荐

