【发布时间】:2017-01-23 19:19:38
【问题描述】:
我创建了一个步进器来增加我的应用程序中的字体大小,现在,我想保存最后一个字体大小,这样当用户重新打开应用程序时,最后一个字体大小将保持不变。我试图将它保存到 UserDefaults 但它不会让我保存我的标签,因为我正在使用 UIFont 来建立我想要的字体类型,并且 CGFloat 能够使用我的步进器切换字体大小。
当我运行应用程序并尝试选择字体大小时,应用程序崩溃,我找不到问题。我知道问题在于尝试将 UIFont 中的数据保存到 UserDefaults 中,因为当我注释掉那行代码时,应用程序运行没有问题。
另外,在我尝试调用 ViewDidAppear 函数中存储的 UserDefault 设置后,我收到一条错误消息,提示我无法分配 Any?输入 UIFont?
任何帮助将不胜感激。同样,我的意图是,当用户使用步进器更改字体大小时,字体大小将保持不变,即使在退出并重新打开应用程序后也是如此。
import UIKit
import Foundation
class ViewController: UIViewController {
@IBOutlet weak var quotesLabel: UITextView!
@IBOutlet weak var welcomeLabel: UILabel!
@IBOutlet weak var topLabel: UILabel!
@IBOutlet weak var generateLabel: UILabel!
@IBOutlet weak var fontStepper: UIStepper!
@IBOutlet weak var minFontSizeLabel: UILabel!
@IBOutlet weak var adjustFontSizeLabel: UILabel!
@IBOutlet weak var maxFontSizeLabel: UILabel!
let quotesBook = QuotesBook()
let defaults = UserDefaults.standard
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib
fontStepper.wraps = true
fontStepper.autorepeat = true
generateLabel.font = UIFont(name: "HoeflerText-Italic", size: 15)
generateLabel.textColor = UIColor(red: 25/255, green: 23/255, blue: 170/255, alpha: 230/255)
generateLabel.textAlignment = NSTextAlignment.center
topLabel.font = UIFont(name: "HoeflerText-Italic", size: 20)
topLabel.textColor = UIColor(red: 25/255, green: 23/255, blue: 170/255, alpha: 230/255)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func stepperPressed(_ sender: UIStepper) {
quotesLabel.isEditable = true
quotesLabel.font = UIFont (name: "Futura-MediumItalic", size: CGFloat(Float(sender.value)))
defaults.set(quotesLabel.font, forKey: "textSize")
}
@IBAction func showQuoteBttn(_ sender: Any) {
quotesLabel.textAlignment = NSTextAlignment.center
maxFontSizeLabel.isHidden = false
adjustFontSizeLabel.isHidden = false
minFontSizeLabel.isHidden = false
fontStepper.isHidden = false
generateLabel.isHidden = false
welcomeLabel.isHidden = true
topLabel.isHidden = true
quotesLabel.isHidden = false
quotesLabel.text = quotesBook.randomQuote()
}
override func viewDidAppear(_ animated: Bool) {
if let b = defaults.object(forKey: "textSize")
{
quotesLabel.font = b
}
}
【问题讨论】:
-
为什么不直接保存字体大小?
-
您好!这就是为什么我正在尝试这样做。但是,我不想创建另一个按钮来保存字体大小。我想要做的是,一旦你完成使用步进器选择你想要的任何字体大小,应用程序会记住这个大小,直到你再次更改它。
-
感谢大家提供的所有解决方案。我真的很感谢你们抽出时间来帮助我。我稍后会尝试一下。上帝保佑你们。