刷新视图控制器。动态字体大小

时间:2015-05-25 11:56:37

标签: swift fonts size viewcontroller

我想设置一种方法来更改应用中所有内容的字体大小,以便我可以像访问辅助功能一样。所以我可以将我的字体设置为中小型。我在一个单独的应用程序中测试了这个,通过单击按钮时字体变量发生变化。

我想知道如何刷新视图控制器,用这个新变量重新加载标签。我知道我可以直接对标签这样做,但我想要一种在应用程序中做所有事情的方法。

import UIKit

class ViewController: UIViewController {

@IBOutlet weak var label1: UILabel!
var fontsize = CGFloat(10)

@IBAction func small(sender: AnyObject) {
    fontsize = CGFloat(10)
}

@IBAction func big(sender: AnyObject) {
    fontsize = CGFloat(20)
}

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    label1.font = UIFont(name: label1.font.fontName, size: fontsize)
    }


override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

}

1 个答案:

答案 0 :(得分:0)

如果您希望通过应用在所有标签中更改字体大小,则需要创建自定义标签并在其上添加观察者,如下所示

class FontSizeAdjustedLabel: UILabel {

/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
override func drawRect(rect: CGRect) {
    // Drawing code
}
*/

override init(frame: CGRect) {

    super.init(frame: frame)

    NSNotificationCenter.defaultCenter().addObserver(self, selector: "changeFontSize:", name: "FontSizeAdjusted", object: nil)
}

required init(coder aDecoder: NSCoder) {

    super.init(coder: aDecoder)

    NSNotificationCenter.defaultCenter().addObserver(self, selector: "changeFontSize:", name: "FontSizeAdjusted", object: nil)
}

func changeFontSize(notification:NSNotification){

    self.font = UIFont(name: self.font.fontName, size: notification.object as! CGFloat)
}

}

然后在您的按钮操作中,只发布一个具有相应名称的通知

@IBAction func small(sender: AnyObject) {
     NSNotificationCenter.defaultCenter().postNotificationName("FontSizeAdjusted", object: 10.0)
}

@IBAction func big(sender: AnyObject) {
    NSNotificationCenter.defaultCenter().postNotificationName("FontSizeAdjusted", object: 20.0)
}

请注意,为了使此解决方案有效,您必须将所有标签类从UILabel更改为FontSizeAdjustedLabel