在Interface Builder和/或Storyboard中访问“文本样式”

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

+(UIFont*)h1{ return [UIFont fontWithName:@"Helvetica" size:48.0]; } 

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

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

编辑:

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

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

好的,所以事实certificate这是可能的! 就是这样:

  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"); } } } 
  2. 创build你想实现样式的任何对象的子类,比如说UILabel,然后input下面的代码:

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

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

我真的不明白你的意思。 但是你想从Interface Builder中设置自定义的“文本样式”,你可以这样做。 为UILable

1,创build类别UILabel + MyCustomStyle。

UILabel + MyCustomStyle.h

 #import <UIKit/UIKit.h> @interface UILabel (MyCustomStyle) @property (nonatomic, copy) NSString *mTextStyle; @end 

UILabel + MyCustomStyle.m

 #import "UILabel+MyCustomStyle.h" @implementation UILabel (MyCustomStyle) -(NSString *)mTextStyle { return self.text; } -(void)setMTextStyle:(NSString *)txt{ if ([txt isEqualToString:@"h1"]) { // custom style h1 code self.font = ...; }else if ([txt isEqualToString:@"h2"]){ // custom style h2 code self.font = ...; } //... more custom style } 

2,在IB中分配文本样式

在这里输入图像说明