2012-04-21 92 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獲取標籤。

相關問題