objective-c - 在 iOS 中动态更改属性 getter 和 setter

标签 objective-c ios properties runtime bind

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

项目结构如下:

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

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

我的问题如下:如何将自定义 View Controller 中包含的属性的 getter 和 setter 方法与 SOView 子类中生成的控件绑定(bind)?

最佳答案

与 xib 的做法相同...调用 setValue:forKey:

如果你有这样的东西

@interface MyViewController : SOViewController

@property (nonatomic, strong) UIButton *myButton;

// ...

@end

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

MyViewController *viewController = // ...

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

您需要将 socket 的名称添加到 plist,以便它知道要设置什么

关于objective-c - 在 iOS 中动态更改属性 getter 和 setter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9964916/

相关文章:

cmake - 为什么要为 CACHE 变量设置 STRINGS 属性?

iphone - FFmpeg:与audioqueue的音频同步

objective-c - SQLite 是否支持 "datareader"?

iphone - 将查询字符串添加到 NSString 的干净方法?

ios - Pod Update 正在删除 "Target Support Files"但没有更新我的项目设置

iphone - Objective C 属性的歧义

objective-c - 为什么它不能从主文件中识别头文件中的@properties?

iphone - 用图像掩盖图像?

ios - CG 光栅数据 - CGProviderCreateWithCopyOfData - 无法发布?

ios - SwiftUI:为特定 View 设置状态栏颜色