迭代对象操作或一次更改多个对象
问题描述:
做我正在做的事情的最佳方式是什么? ,badThingX
和nothin
是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现在..
答
你可以将它们全部放在一个数组中init
或awakeFromNib
或类似的使它更容易迭代后来。
@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;
答
首先,你有一些被称为“布尔变量”。
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
你的意思是'回归自我;'? – kennytm 2010-01-17 18:33:51
@KennyTM啊当然是啊... – epatel 2010-01-17 18:37:31
我使用NSArray而不是'UIView * theThings [NUM_THINGS];'并且我在遍历循环时遇到问题,我在尝试'[theThings objectAtIndex:1]; '我做对了吗? – Dot 2010-01-17 19:29:15