2010-01-17 78 views
1

做我正在做的事情的最佳方式是什麼? ,badThingXnothin是UILabels。迭代對象操作或一次更改多個對象

NSString *todayNothing = [[todayArray objectAtIndex:0] objectForKey: @"nothing"]; 
if (todayNothing!=NULL) { 
    goodThing1.hidden = YES; 
    goodThing2.hidden = YES; 
    goodThing3.hidden = YES; 
    badThing1.hidden = YES; 
    badThing2.hidden = YES; 
    badThing3.hidden = YES; 
    nothing.text = todayNothing; 
    nothing.hidden = NO; 
} else { 
    goodThing1.hidden = NO; 
    goodThing2.hidden = NO; 
    goodThing3.hidden = NO; 
    badThing1.hidden = NO; 
    badThing2.hidden = NO; 
    badThing3.hidden = NO; 
    nothing.hidden = YES; 
} 

即當該todayNothing有一些文字,我想隱藏6個標籤,並顯示nothing標籤,否則相反。我沒有費心去優化這個,但可能會有更多的標籤比6現在..

回答

2

你可以將它們全部放在一個數組中initawakeFromNib或類似的使它更容易迭代後來。

@class MyThing { 

    UIView *theThings[NUM_THINGS]; // ...or use an NSArray if you like that 

} 
@end 

- (id)init // maybe awakeFromNib would be a better place for UI elements 
{ 
    self = [super init]; 
    if (self) { 
    theThings[0] = goodThing1; 
    theThings[1] = goodThing2; 
    theThings[2] = goodThing3; 
    : 
    } 
    return self; 
} 

...再後來你使用一個循環這樣

for (int i=0; i<NUM_THINGS; i++) 
    theThings[i].hidden = YES; 
+0

你的意思是'迴歸自我;'? – kennytm 2010-01-17 18:33:51

+0

@KennyTM啊當然是啊... – epatel 2010-01-17 18:37:31

+0

我使用NSArray而不是'UIView * theThings [NUM_THINGS];'並且我在遍歷循環時遇到問題,我在嘗試'[theThings objectAtIndex:1]; '我做對了嗎? – Dot 2010-01-17 19:29:15

1

首先,你有一些被稱爲「布爾變量」。

NSString *todayNothing = [[todayArray objectAtIndex:0] objectForKey: @"nothing"]; 
BOOL todayNothing_has_something = (todayNothing!=nil); // YES if todayNothing!=nil, NO otherwise 
goodThing1.hidden = todayNothing_has_something; 
goodThing2.hidden = todayNothing_has_something; 
goodThing3.hidden = todayNothing_has_something; 
badThing1.hidden = todayNothing_has_something; 
badThing2.hidden = todayNothing_has_something; 
badThing3.hidden = todayNothing_has_something; 
if (todayNothing) 
    nothing.text = todayNothing; 
nothing.hidden = ! todayNothing_has_something; 

其次,最好是使用數組或NSArray來存儲所有的good - 和badThing秒。 (見epatel的答案。)

+0

這將代碼長度減半,所以我現在要使用它。同時我正在嘗試改變NSArray的epatel代碼。 – Dot 2010-01-17 19:26:48