objective-c - 通过字符串名称或变量访问 Objective-C 对象

标签 objective-c

我一直在四处寻找,并没有找到任何关于这样做的东西,我不确定它是否可能,但这就是我想要实现的目标。请注意,我给出了一个非常非常简单的例子来说明我正在尝试做的事情。此外,所发布代码的相似之处都是假设性的,并不意味着更正代码语法。它只是为了帮助进一步说明通过引用类似类型的功能所需的最终结果。所以在提供替代方法之前请理解这个概念......

话虽如此,正如标题所说,我正在尝试查看我是否可以访问一个对象,让我们通过字符串名称或变量使用if语句说一个uilabel。例如,假设我们有 3 个 uilabes

UILabel *label1;
UILabel *label2;
UILabel *label3;

我们从那里进行所有适当的综合,而不是。现在在某个时候我想引用一个基于 let say 和 int 的标签。

int intNumber = 2;

这是理论部分。我现在想设置名称中具有匹配 int 值的标签的文本。

label(%i, intNumber).text = [NSString stringWithFormat:@"This is Label %i", intValue];

结果会是...

label2.text = @"This is Label 2";

如果 int 值为 1,则 label1 将被更改。或者如果它是 3,那么 label3 将被更改,等等......

或者如果可以使用标签的字符串名称来完成相同的过程。

int intValue = 1;

NSString *labelName;

然后在某个时候

labelName = [NSString stringWithFormat:@"label%i",intValue];

现在通过引用“labelName”调用它以某种方式设置 label1 的文本。如果有人可以提出建议或评论,甚至可以完成这样的事情,我们将不胜感激。我知道您可以通过字符串名称引用类和选择器,但我不确定对象?我不知道“valueForKey:”是否是我应该寻求的方式?

抱歉这篇冗长的帖子,但我只是想确保我说出了我想做的事情。

最佳答案

抱歉,伙计们,我终于想通了。 “setValue:forKeyPath:”原来是我需要的。举个例子...

例子.h

@property (strong, nonatomic) UILabel *label1;
@property (strong, nonatomic) UILabel *label2;
@property (strong, nonatomic) UILabel *label3;

例子.m

@synthesize label1, label2, label3;

- (void)someMethod:(int)labelVarInt {

[self setValue:[NSString stringWithFormat:@"This is Label %i", labelVarInt] forKeyPath:[NSString stringWithFormat:@"label%i.text", labelVarInt]];

}

希望这可以帮助任何其他需要做类似事情的人。

关于objective-c - 通过字符串名称或变量访问 Objective-C 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10261380/

相关文章:

iphone - iPhone-无法识别kCFStreamNetworkServiceType?

objective-c - Swift 代码看不到在 Objective-C 类别中声明的方法

ios - 将 NSString 转换为 NSDictionary

ios - 是否可以为对象中的字典值创建 NSSortDescriptor?

objective-c - 我应该如何用 camelCase 写带破折号的单词?

ios - MKMapView 中心不正确

iPhone API : SIP RTP SRTP ZRTP

ios - CFBundle 运行时错误 - 这是什么意思?

ios - 在 App Delegate 中设置第一个 View Controller

objective-c - 如何在测试用例中使用 AppDelegate?