我有两个 UIViewController(ViewController 和 SettingViewController)。
在 SettingViewController 中,我有 3 个按钮,当按下这些按钮时,应该会更改主 ViewController 中 UITextView 的字体。
我正在使用 NSUserDefaults。但是,它只在第一次起作用或根本不起作用。
我认为问题是当我从设置 View 返回主视图时, View 没有重新加载。
我该怎么做?
SettingViewController.swift
class SettingsViewController: UIViewController {
var handWritingOption: String?
var zapfinoOption: String?
var systemOption: String?
@IBAction func handWritingPressed(sender: AnyObject) {
handWritingOption = "1"
zapfinoOption = "0"
systemOption = "0"
NSNotificationCenter.defaultCenter().postNotificationName("load", object: nil)
NSUserDefaults.standardUserDefaults().setObject(handWritingOption, forKey: "handWritingBool")
NSUserDefaults.standardUserDefaults().setObject(zapfinoOption, forKey: "zapfinoBool")
NSUserDefaults.standardUserDefaults().setObject(systemOption, forKey: "systemBool")
NSUserDefaults.standardUserDefaults().synchronize()
}
@IBAction func zapfinoPressed(sender: AnyObject) {
handWritingOption = "0"
zapfinoOption = "1"
systemOption = "0"
NSNotificationCenter.defaultCenter().postNotificationName("load", object: nil)
NSUserDefaults.standardUserDefaults().setObject(handWritingOption, forKey: "handWritingBool")
NSUserDefaults.standardUserDefaults().setObject(zapfinoOption, forKey: "zapfinoBool")
NSUserDefaults.standardUserDefaults().setObject(systemOption, forKey: "systemBool")
}
@IBAction func systemPressed(sender: AnyObject) {
handWritingOption = "0"
zapfinoOption = "0"
systemOption = "1"
NSNotificationCenter.defaultCenter().postNotificationName("load", object: nil)
NSUserDefaults.standardUserDefaults().setObject(handWritingOption, forKey: "handWritingBool")
NSUserDefaults.standardUserDefaults().setObject(zapfinoOption, forKey: "zapfinoBool")
NSUserDefaults.standardUserDefaults().setObject(systemOption, forKey: "systemBool")
}
}
ViewController.swift
class ViewController: UIViewController {
@IBOutlet weak var noteResult: UITextView!
var handWritingOption = NSUserDefaults.standardUserDefaults().objectForKey("handWritingBool") as? String
var zapfinoOption = NSUserDefaults.standardUserDefaults().objectForKey("zapfinoBool") as? String
var systemOption = NSUserDefaults.standardUserDefaults().objectForKey("systemBool") as? String
override func viewDidLoad() {
super.viewDidLoad()
NSNotificationCenter.defaultCenter().addObserver(self, selector: "loadList:",name:"load", object: nil)
}
func loadList(notification: NSNotification){
println("Font Changed")
if handWritingOption == "1" {
noteResult.font = UIFont(name: "ThinPencilHandwriting", size: 15)
}
if zapfinoOption == "1" {
noteResult.font = UIFont(name: "Zapfino", size: 15)
}
if systemOption == "1" {
noteResult.font = UIFont(name: "Papyrus", size: 15)
}
}
}
最佳答案
它不起作用,因为您正在使用通知
。如果在更改设置时未在 ViewController 中注册 loadList
的通知,则不会更改任何内容。为了实现这一点,请进行以下修改。
第 1 步
:删除通知的使用
第 2 步
:在您的 ViewController
中添加以下方法
第3步
:在viewWillAppear()
中调用它,如下所示
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
// *** Load font value ***
handWritingOption = NSUserDefaults.standardUserDefaults().objectForKey("handWritingBool") as? String
zapfinoOption = NSUserDefaults.standardUserDefaults().objectForKey("zapfinoBool") as? String
systemOption = NSUserDefaults.standardUserDefaults().objectForKey("systemBool") as? String
// *** call setFonts ***
self.setFonts()
}
func setFonts()
{
if handWritingOption == "1" {
noteResult.font = UIFont(name: "ThinPencilHandwriting", size: 15)
}
if zapfinoOption == "1" {
noteResult.font = UIFont(name: "Zapfino", size: 15)
}
if systemOption == "1" {
noteResult.font = UIFont(name: "Papyrus", size: 15)
}
}
每次您的 View 出现在屏幕上时,它都会设置字体。
关于ios - 如何在两个 View 之间动态更改字体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32842454/