ios - 如何在两个 View 之间动态更改字体?

标签 ios swift uitextview nsuserdefaults

我有两个 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/

相关文章:

ios - 框架仅在设备上导致崩溃

ios - TableView 填充相同的字符串

ios - 如何在 iOS 11 中为 Collection View 大标题导航栏添加刷新控件?

xcode - 即使在 Xcode 6.3 中更新了 Facebook,AppDelegate 应用程序功能中的 Facebook SDK 错误

ios - 在 CitrusPay 网关 swift ios 中设置卡类型的问题

ios - Afnetworking multipart/formdata 返回请求在 ios 11 中失败,但在 ios 10 中工作正常

ios - 在 iOS 7 中滚动到不稳定的 UITextView 底部

ios - UITableView beginUpdate/endUpdate 导致滚动到顶部

ios - 多个DCSliders发送不同的控制值(Xcode)

Swift:混合风格的文本