我想使用for循环隐藏各种UILabel。
@interface MyViewController : UIViewController {
NSMutableArray * labelArray;
}
@property (nonatomic, retain) IBOutlet UILabel *label1, *label2, *label3;
...
-(void)viewDidLoad {
[super viewDidLoad];
[labelArray initWithObjects:label1,label2,label3,nil];
for(int i=0; i<sizeof(labelArray); i++){
UILabel *label = [labelArray objectAtIndex:i];
label.hidden = !label.hidden;
}
}
执行此操作时,不会隐藏标签。它们已经在Interface Builder中“连接”了。我做错了什么?谢谢!
答案 0 :(得分:3)
这不是sizeof
的用途。这是一个编译器构造,它告诉你一个值占用了多少字节,这无法确定运行时NSMutableArray中有多少元素。你想要:
for (UILabel *label in labelArray) {
label.hidden = !label.hidden;
}
如果这不起作用,那么你的数组不包含你认为它的对象 - 很可能,你忘了实际创建数组 - 只需将init
发送到nil就不会创建一个对象。不管怎样,你应该做labelArray = [[NSMutableArray alloc] initWithObjects:label1,label2,label3,nil];
。 alloc
和init
携手合作。