访问Interface Builder和/或Storyboard中的"文本样式"

Rog*_*are 2 xcode storyboard xib ios

在我的一个应用程序中,我有一个样式文档,其中包含不同文本样式的方法,例如:

+(UIFont*)h1{
    return [UIFont fontWithName:@"Helvetica" size:48.0];
}
Run Code Online (Sandbox Code Playgroud)

然后,在viewDidLoad每个视图控制器的方法中,我以编程方式设置文本样式.这是一种非常好的方法,可以使应用程序中的样式保持一致且易于调整.

这是我的问题:有没有办法让XIB文件/故事板反映这些文本样式?如果没有,有没有办法实现类似的功能(即,在一个地方定义所有样式,并从那里拉出XIB/Storyboard元素)?谢谢阅读.

编辑:

为了澄清,这是期望的最终结果:

  1. 在项目的某处定义一些常量文本样式,如h1,h2,p.每种文本样式都有自己的字体,字体大小,颜色等.
  2. 能够将UILabels我的各种视图中的样式设置为任何这些文本样式.这可以在代码中,在Interface Builder中完成(例如,在Luan建议的用户定义的运行时属性中),或者在任何地方.
  3. 能够在Interface Builder/Storyboard中查看应用于每个UILabel的样式,而无需每次都运行应用程序.

Rog*_*are 10

好的,事实证明这是可能的!这是如何做:

  1. 添加样式类,您可以将所有样式信息放在一个位置:

    import UIKit
    
    class MyStyles: NSObject {
      static func fontForStyle(style:String)->UIFont{
        switch style{
        case "p":
          return UIFont.systemFontOfSize(18);
        case "h1":
            return UIFont.boldSystemFontOfSize(36);
        case "h2":
            return UIFont.boldSystemFontOfSize(24);
        default:
            return MyStyle.fontForStyle("p");
        }
      }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 创建您想要实现样式的任何对象的子类,比如UILabel,并输入以下代码:

    import UIKit
    
    @IBDesignable class MyLabel: UILabel {
      @IBInspectable var style:String="p"{
        didSet{self.font=MyStyle.fontForStyle(style)} 
      }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 在Interface Builder中将UILabel添加到视图中,并将其类设置为MyLabel.然后在属性检查器中,您将看到一个样式字段,您可以在其中键入h1,h2或其他内容,标签的字体将立即更新.想要将所有h1标签更改为48的大小?只需更新MyStyles,您就会立即看到XIB/Storyboard中的更改.

这将是一个巨大的节省时间,我希望你们中的一些人发现它也很有用!