如何在两个视图之间动态更改字体?
How to change fonts dynamically between two views?
我有两个 UIViewController(ViewController 和设置ViewController)。
在设置中ViewController 我有 3 个按钮,当按下这些按钮时应该更改主 ViewController.
中 UITextView 的字体
我正在使用 NSUserDefaults。但是,它只在第一次起作用或根本不起作用。
我认为问题是当我从设置视图返回主视图时,视图没有重新加载。
我该怎么做?
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)
}
}
}
它不起作用,因为您正在使用 Notification
。如果更改设置时 loadList
的通知未在 ViewController 中注册,则不会更改任何内容。为此,请进行以下修改。
Step 1
: 取消使用通知
Step 2
: 在你的ViewController
中添加如下方法
Step 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)
}
}
每次您的视图出现在屏幕上时,它都会设置字体。
我有两个 UIViewController(ViewController 和设置ViewController)。
在设置中ViewController 我有 3 个按钮,当按下这些按钮时应该更改主 ViewController.
中 UITextView 的字体我正在使用 NSUserDefaults。但是,它只在第一次起作用或根本不起作用。
我认为问题是当我从设置视图返回主视图时,视图没有重新加载。
我该怎么做?
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)
}
}
}
它不起作用,因为您正在使用 Notification
。如果更改设置时 loadList
的通知未在 ViewController 中注册,则不会更改任何内容。为此,请进行以下修改。
Step 1
: 取消使用通知
Step 2
: 在你的ViewController
Step 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)
}
}
每次您的视图出现在屏幕上时,它都会设置字体。