2013-06-23 99 views
1

如果我有100個UITextFields執行同樣的動作,許多對象

myTextfFeld1myTextField2 ...依此類推,直到mytextField100

...他們都執行相同的動作,說變化myTextField1.alpha = 0.4myTextField1.alpha = 1

而不是寫這個了100次有沒有這樣做

我這裏iOS looping over an object's properties and adding actions一看的更有效的方式,但它仍然意味着將所有的UITextFields到數組。

+4

爲什麼不在數組中創建它們以開始? – Kevin

+0

擁有100個ivars是愚蠢的。使用NSArray或IBOutletCollection。 – rmaddy

+0

我沒有100個ivars,只是在我解釋我綁定的問題的過程中誇大了我的問題。同意這兩個意見 – JSA986

回答

6

請不要!

Like this.

使用一個陣列,嚴重。 難道你不敢有100個實例變量名爲textField1textField100


只是爲了真正回答你的問題:你仍然可以做到這一點。同樣,我強烈反對這樣做,但只是爲了完整起見,下面的代碼:

for (int i = 1; i <= 100; i++) { 
    NSString *ivarName = [NSString stringWithFormat:@"myTextField%d", i]; 
    UITextField *tf = [self valueForKey:ivarName]; 
    [tf doWhateverYouWant]; 
} 

反映在Objective-C是真棒,不是嗎?不是當被濫用時。

+0

我會夢見它只是SO – JSA986

+0

@ JSA986的示例文本對不起,我不明白你的意思,請詳細說明。 – 2013-06-23 18:27:17

+0

我實際上不會有一個名爲'myText1'等的100個實例變量。在發佈我的問題時,它們是簡單的假設實例變量。他們有比這更好的命名約定;-)謝謝你的回答! – JSA986

1

可以限定出口的收集和所有的文本框從XIB連接到它:

@property (nonatomic, weak) IBOutletCollection(UITextField) NSArray *textFields; 

然後你可以遍歷所有的textFields陣列。

+0

...或者代替循環,可以在'NSArray'上使用'-makeObjectsPerformSelector:withObject:'方法。 – holex

+1

@holex,true,假設該方法需要一個對象參數(所以不能用於設置'alpha'例如) – Wain

+0

是的,你是絕對正確的,它需要一點與'NSInvocation'非對象參數。這取決於海報選擇的代碼模式,但我認爲這不是原始問題的一部分。 – holex

-2

對文本字段使用循環和數組。 例如

int i = 0 
do textfield[i].alpha = 1 
i = i+1 
until i = 100 
+0

這個問題被標記爲Objective-C。答案應該使用相同的語言。 – rmaddy

+0

所以我不允許用僞代碼來回答人們? – user2369405

+0

你允許嗎?當然。但要有所幫助,您的回答應該提供適合問題的可用代碼。 – rmaddy