gpt4 book ai didi

ios - 在 Interface Builder 和/或 Storyboard中访问 "text styles"

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:52:58 25 4
gpt4 key购买 nike

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

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

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

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

编辑:

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

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

最佳答案

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

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

    import UIKit

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

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

关于ios - 在 Interface Builder 和/或 Storyboard中访问 "text styles",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32682764/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com