for循环问题改变数组中所有对象的属性

时间:2014-03-06 13:16:10

标签: ios nsmutablearray uilabel

我的第一次,我希望这对我来说不仅是个问题。

Upfront,我创建并完成所有没有.nib,.xib或storyboard的东西,对Xcode来说还是一个新手。

问题描述:

我创建了一系列标签,这些标签以编程方式进入数组。

int i低于或等于4,否则无论如何都不会发射。

int i = (int)[players count];

if (i<=4) {

    nameLabel = [[UILabel alloc]initWithFrame:CGRectMake(self.view.bounds.size.width-(self.view.bounds.size.width/3)-20*widthmultiplayer, self.view.bounds.size.height-((50*heightmultibplyer)*i)-50*heightmultibplyer, (self.view.bounds.size.width/3), 50*heightmultibplyer)];
    nameLabel.text = enterName.text;

    [nameLabel setFont:[UIFont fontWithName:@"Arial-BoldMT" size:fontSize]];
    [nameLabel setTextAlignment:NSTextAlignmentRight];
    [self.view addSubview:nameLabel];
    players[i] = nameLabel;
    NSLog(@"index: %i , name:%@", i, nameLabel.text);

    enterName.text = @"";
}

然后我用以下代码以编程方式隐藏所有标签

for (UILabel *label in players) {
    label.hidden = YES;
}

现在有趣的部分 - 当我想再次使用

展示它们时
for (UILabel *label in players) {
    label.hidden = NO;
}

它没有显示最后一个条目。

意义:

  • 如果我只有1个条目则不显示任何内容
  • 如果我有3个条目,则只显示2个
  • 依此类推......

有趣的是我的数组日志显示所有对象,显示每个对象的正确索引,隐藏状态为false( - 应该是什么)。

试图通过

将观点带到前面
[self.view bringSubviewToFront:label]

但这不会有效。

我无法弄清楚原因。关于我做错的答案和提示将受到高度赞赏。

----编辑---- 我找到了解决问题的方法,也许这有助于某人: 我通过这样做改变了隐藏值的变化:

        for (UILabel *label in players) {
        [label removeFromSuperview];
        label.hidden = NO;
        [self.view addSubview:label];
    }

看起来俗气,俗气,但有效。 如果有人可以帮我找到解决方案或主要错误,我真的很喜欢它。

2 个答案:

答案 0 :(得分:0)

NSArray索引从0开始。您必须从0到[players count] - 1

答案 1 :(得分:0)

好的,我在这个问题中完成了整个理论部分,我得到的结果是它没有任何问题地正常工作

以下是我用于测试的代码

players=[[NSMutableArray alloc]initWithCapacity:3];


for (int k=0; k<10; k++) {
    NSLog(@"%@",NSStringFromCGRect(CGRectMake(self.view.bounds.size.width-(self.view.bounds.size.width/3)-20*widthmultiplayer, self.view.bounds.size.height-((50*heightmultibplyer)*k)-50*heightmultibplyer, (self.view.bounds.size.width/3), 50*heightmultibplyer)));

}
int i=0;
CGRect rect=CGRectMake(self.view.bounds.size.width-(self.view.bounds.size.width/3)-20*widthmultiplayer, self.view.bounds.size.height-((50*heightmultibplyer)*i)-50*heightmultibplyer, (self.view.bounds.size.width/3), 50*heightmultibplyer);
NSLog(@"%@",NSStringFromCGRect(rect));
nameLabel = [[UILabel alloc]initWithFrame:rect];
[nameLabel setBackgroundColor:[UIColor blueColor]];
[nameLabel.layer setBorderColor:[UIColor blackColor].CGColor];
[self.view addSubview:nameLabel];
players[0] = nameLabel;


i=1;
nameLabel = [[UILabel alloc]initWithFrame:CGRectMake(self.view.bounds.size.width-(self.view.bounds.size.width/3)-20*widthmultiplayer, self.view.bounds.size.height-((50*heightmultibplyer)*i)-50*heightmultibplyer, (self.view.bounds.size.width/3), 50*heightmultibplyer)];
[nameLabel setBackgroundColor:[UIColor redColor]];
[nameLabel.layer setBorderColor:[UIColor blackColor].CGColor];

[self.view addSubview:nameLabel];

players[1] = nameLabel;
NSLog(@"%@",players);
i = (int)[players count];
if (i<=4) {
    NSLog(@"%@",players);
    nameLabel = [[UILabel alloc]initWithFrame:CGRectMake(self.view.bounds.size.width-(self.view.bounds.size.width/3)-20*widthmultiplayer, self.view.bounds.size.height-((50*heightmultibplyer)*i)-50*heightmultibplyer, (self.view.bounds.size.width/3), 50*heightmultibplyer)];
    [nameLabel setBackgroundColor:[UIColor greenColor]];
    [nameLabel.layer setBorderColor:[UIColor blackColor].CGColor];
    [self.view addSubview:nameLabel];
    players[i] = nameLabel;
    NSLog(@"index: %i , name:%@", i, nameLabel.text);

    NSLog(@"%@",players);
}    
for (UILabel *label in players) {
    label.hidden = YES;
}
NSLog(@"%@",players);
for (UILabel *label in players) {
    label.hidden = NO;
}

NSLog(@"%@",players);

现在解释可能出现的问题。这种情况可能会因为添加到数组中的一个标签没有添加到视图中而出现。这就是你的原因重新添加它会变得有效