我是新来的。我一直在努力研究更多的信息,但没有成功,希望有人能帮助我:
我正在构建一个类似于one ViewController (CLViewController)中的checkbox的应用程序,我使用的是按钮作为图像,一旦按下它们,它的显示就会变成另一个图像。(选中/未选中-- item1a/item1b)
这个应用程序还有其他ViewControllers,你可以在那里获得不同的信息,但我遇到的问题是,当我从另一个ViewControllers移动时,当我回到这个CLViewController时,CLViewController返回到它的默认值,所有这些都是未选中的。我的意图是保持选中的按钮在我离开时的状态。我知道如何使用userDefaults处理文本,但我不知道如何编写按钮及其状态的代码。
import UIKit
class CLviewControllerViewController: UIViewController {
@IBOutlet weak var btn1: UIButton!
@IBOutlet weak var btn2: UIButton!
@IBOutlet weak var btn3: UIButton!
@IBAction func btn1Action(_ sender: UIButton)
{
if sender.isSelected == true
{
btn1.setImage(UIImage (named: "item1a"), for: .normal)
sender.isSelected = false
}
else
{
btn1.setImage(UIImage (named: "item1b"), for: .normal)
sender.isSelected = true
}发布于 2020-04-15 16:48:27
首先,在viewDidLoad中,我们将为每个按钮分配一个标记,btn1将具有标记0,btn2将具有标记1,btn3将具有标记2。然后,我们可以读取存储在UserDefaults中的值并设置相应的状态。请注意,我们将为key Item- tag存储它们,因此btn3将存储为Item-2。然后,我们将状态存储在您的@IBAction中,以便在您返回到这个视图控制器时可以检索到它。
@IBOutlet weak var btn1: UIButton!
@IBOutlet weak var btn2: UIButton!
@IBOutlet weak var btn3: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
for (index, btn) in [btn1, btn2, btn3].enumerated() {
btn?.tag = index
let selected = UserDefaults.standard.bool(forKey: "Item-\(index)")
btn?.isSelected = selected
}
}
@IBAction func btn1Action(_ sender: UIButton)
{
if sender.isSelected == true
{
btn1.setImage(UIImage (named: "item1a"), for: .normal)
sender.isSelected = false
}
else
{
btn1.setImage(UIImage (named: "item1b"), for: .normal)
sender.isSelected = true
}
let tag = sender.tag
//save state
UserDefaults.standard.set(sender.isSelected, forKey: "Item-\(tag)")
}https://stackoverflow.com/questions/61223893
复制相似问题