【问题标题】:Make all controls to posses some additional properties and methods?让所有控件拥有一些额外的属性和方法?
【发布时间】:2014-03-18 10:00:31
【问题描述】:

我的应用程序是一个表单设计应用程序(用户可以设计自己的表单),所以我希望UITextFieldUItextViewUIButtonUIImageView 等拥有一些额外的属性和方法.我知道我可以对每个控件进行子类化并添加所需的属性和方法。但我觉得可能还有其他更简单的方法可以实现这一点。

有没有其他方法或者子类化每个控件是唯一的方法?

【问题讨论】:

  • 什么类型的属性和方法?
  • @Mikael CGRect,NSString,UIColor 等
  • 所以你基本上想根据用户选择的选择来设置字符串的颜色、大小和类似的东西?
  • @Mikael 是的,你是对的

标签: ios subclass uicontrol


【解决方案1】:

您可以使用关联对象将其他属性添加到对象类别。 请谨慎使用,但请看here

【讨论】:

    【解决方案2】:

    我认为您要做的是根据用户选择将主题应用于控件。我认为您不需要更改元素本身,而是应用主题概念。我发现的最佳解决方案是创建一个处理格式、用户选择等的对象。这就是我认为你可以实现它的方式:

    1. 创建一个扩展 NSObject 的格式化程序对象
    2. 为主题的每个可变部分都有一个属性:

      例如,如果控件的大小发生变化,您可以在其中添加一个 CG 元素。如果字体颜色发生变化,则其中有一个 UIFont 属性。

    3. 通过添加以下内容创建您的格式化程序的共享实例:

      +(Formater *) sharedInstance; //add to .h
      
      
      + (Formater *) sharedInstance //add to .m
      {
          if (!_sharedInstance)
          {
              _sharedInstance = [[Formater alloc] init];
          }
      }
      
    4. 现在您可以调用格式化程序的共享实例并使用它的属性来设置元素的属性。例如:如果用户选择 UILabel 应该是 fontX 和大小 10。你设置formater.labelFont = [UIFont fontWithName: fontX size:10];。然后每次你有一个标签时,你只需设置label.font = formater.labelFont]; 如果每个 UILabel 可以有不同的大小和字体,你只需在你的格式化程序中创建一个字典来保存它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-05
      • 2021-11-25
      • 1970-01-01
      • 2017-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多