在 Interface Builder and/or 故事板中访问 "text styles"

Accessing "text styles" in Interface Builder and/or Storyboards

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

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

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

这是我的问题:有什么方法可以让 XIB files/Storyboards 反映这些文本样式?如果没有,是否有任何方法可以实现类似的功能(即,将所有样式定义在一个地方,并从那里提取 XIB/Storyboard 元素)?感谢阅读。

编辑:

澄清一下,这是期望的最终结果:

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

我不太明白你的意思。但是你想从 Interface Builder 中设置自定义 "text style" 你可以这样做。对于 UILable

1、创建类别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中指定文字样式

好的,事实证明这是可以做到的!方法如下:

  1. 添加样式 class,您可以将所有样式信息放在一个地方:

    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. 为您想要实现样式的任何对象创建子class,比如 UILabel,然后输入以下代码:

    import UIKit
    
    @IBDesignable class MyLabel: UILabel {
      @IBInspectable var style:String="p"{
        didSet{self.font=MyStyle.fontForStyle(style)} 
      }
    }
    
  3. 将 UILabel 添加到 Interface Builder 中的视图并将其 class 设置为 MyLabel。然后在 Attributes Inspector 中,您会看到一个 Style 字段,您可以在其中键入 h1、h2 或其他任何内容,标签的字体将立即更新。想要将所有 h1 标签的大小更改为 48?只需更新 MyStyles,您就会立即在 XIBs/Storyboards 中看到更改。

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