2012-04-21 90 views
2

我一直在环顾四周,并没有完全发现这样做,我不确定它是否有可能,但这是我正在努力实现的目标。请注意,我给出了一个非常简单的例子,我正在尝试做什么。还有,发布代码的相似性都是假设的,并不意味着要纠正代码语法。它只是用来帮助进一步说明通过引用类似功能所需的最终结果。所以请在提供替代方法之前了解这个概念...通过字符串名称或变量访问objective-c对象

与这样说,因为标题说我想看看我是否可以访问一个对象,让我们通过它的字符串名称或变量说一个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,那么标签3将被改变,等等......

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

int intValue = 1; 

NSString *labelName; 

然后在某个点

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

现在不知何故通过引用“标签”来称呼它设置Label1文本。如果任何人可以提供一个建议或评论,甚至可以做到这一点,这将不胜感激。我知道你可以通过字符串名称引用类和选择器,但我不确定对象是什么?我不知道“valueForKey:”是我应该如何去做的方式?

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

+0

对不起,伙计们,我真的明白了。因为我是堆栈溢出的noob,我无法回答我自己的问题。一旦我能够,我会用示例代码发布答案。再次感谢... – DoS 2012-04-21 18:27:00

+0

[目标C等效于PHP的“变量变量”]的可能重复(http://stackoverflow.com/questions/2283374/objective-c-equivalent-of-phps-variable-variables),http: //stackoverflow.com/questions/2231783/create-multiple-variables-based-on-an-int-count/,http://stackoverflow.com/questions/7940809/syntax-help-variable-as-object-name , – 2012-04-21 18:35:00

+0

是的,它很相似,但显然不是正确的答案。 – DoS 2012-04-23 22:35:20

回答

7

对不起,亲爱的&加尔斯,我最终搞清楚了这一点。 “setValue:forKeyPath:”原来是我所需要的。所以一个例子...

example.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]]; 

} 

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

+0

呵呵:)这就是KVC的关键价值编码伟大你有你的答案! – 2012-04-24 02:33:06

+0

是的,我知道kvc和kvo是什么。我只是不确定最好的方法。如果你注意到我甚至在我的问题中提到“valueForKey:”方法。效率是关键,一条线总是胜过5-10。很多人都问过类似的问题,但没有人发布过这样简单的答案。 – DoS 2012-04-24 14:52:22

2

如果只是索引字符串的情况下,你应该可能使用一个数组,否则你正在寻找自省(看看this question)。

2

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

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

相关问题