【问题标题】:Dynamically change property getters and setters in iOS在 iOS 中动态更改属性 getter 和 setter
【发布时间】:2012-04-15 10:24:39
【问题描述】:

我想将我声明的属性绑定到在运行时创建的控件和视图,这与使用 nib / xib 文件时发生的情况非常相似。

项目结构如下:

  • plist 文件: 用于设置视图配置(按钮、标签、文本视图等...)
  • SOViewController:一个应该被任何想要使用布局管理器的类继承的类
  • SOView:一个非常基本的视图,其中包含在 plist 文件中定义的生成控件的字典
  • SOLayoutManager:代表 SOViewController 子类负责创建视图的单例。

每当自定义 viewController 从 SOViewController 继承时,就会从包中加载带有视图配置的 plist 文件。 SOView 被创建,所有控件都由 SOLayoutManager 添加到视图中(并且也可以通过作为视图一部分的字典访问)。自定义视图控制器应将属性与从 plist 文件生成的控件(属于 SOView 实例的一部分的控件)绑定。

我的问题如下:如何将自定义视图控制器中包含的属性的getter和setter方法与SOView子类中生成的控件绑定?

【问题讨论】:

    标签: objective-c ios properties runtime bind


    【解决方案1】:

    xib 的做法与此相同...致电setValue:forKey:

    如果你有这样的事情

    @interface MyViewController : SOViewController
    
    @property (nonatomic, strong) UIButton *myButton;
    
    // ...
    
    @end
    

    SOLayoutManager 创建视图组件时,它会查看是否有outlet 并将其连接起来

    MyViewController *viewController = // ...
    
    // Create and configure the button
    [viewController setValue:configuredButton forKey:@"myButton"];
    

    您需要将插座的名称添加到 plist 中,以便它知道将其设置在什么位置

    【讨论】:

    • 是的,太容易了——我在想我必须用 objc/runtime API 做一些 C 编码:)
    猜你喜欢
    • 2021-11-06
    • 1970-01-01
    • 1970-01-01
    • 2015-02-25
    • 1970-01-01
    • 2018-11-08
    • 1970-01-01
    • 1970-01-01
    • 2017-06-02
    相关资源
    最近更新 更多