2

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

话虽如此,正如标题所说,我想看看我是否可以访问一个对象,让我们通过它的字符串名称或变量说一个 uilabel,而不使用 if 语句。例如,假设我们有 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:”是否是我应该这样做的方式?

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

4

3 回答 3

7

对不起,伙计们,我终于弄清楚了。“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]];

}

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

于 2012-04-23T14:04:48.640 回答
2

如果案例只是索引字符串,您可能应该使用数组,否则您正在寻找自省(看看这个问题)。

于 2012-04-21T17:37:32.833 回答
2

我认为您需要将标签存储在 NSArray 中,然后您可以通过索引访问标签。

另一种方法是使用 KVC 获取标签。

于 2012-04-21T17:41:20.960 回答