我已經創建了一個步進器來增加我的應用程序中的字體大小,現在我想保存最後的字體大小,以便當用戶重新打開應用程序時,最後的字體大小將保持不變。我試圖將其保存到UserDefaults,但它不會讓我保存我的標籤,因爲我使用UIFont來建立我想要的字體類型,並且CGFloat能夠使用我的步進器切換字體大小。保存UIFont?以UserDefault Swift 3
當我運行該應用程序,並嘗試選擇字體大小,應用程序崩潰,我找不到問題。我知道問題是試圖將來自UIFont的數據保存到UserDefaults中,因爲當我註釋掉那行代碼時,應用程序沒有運行問題。
此外,我嘗試調用ViewDidAppear函數中存儲的UserDefault設置後,我收到一個錯誤,說我不能指定任何?鍵入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
}
}
你爲什麼不只是保存的字體大小? – redent84
你好!這就是我試圖去做的原因。但是,我不想創建另一個按鈕來保存字體大小。我想要做的是,一旦你完成使用步進器來選擇任何你想要的字體大小,應用程序將記住這個大小,直到你再次改變它。 – Henry
謝謝大家所有的解決方案。我非常感謝你們抽出時間幫助我。我會在稍後嘗試。上帝保佑你們。 – Henry