0

我正在尝试将 UILabel 添加/删除到 ScrollView。添加进行得很好,但在添加新标签之前,我似乎无法删除标签。任何人都可以对这种情况有所了解吗?

-(void)setMessage:(MessageData *)m{

    //Attempting to remove any previous labels

    iPhone_PNPAppDelegate *mainDelegate = (iPhone_PNPAppDelegate *)[[UIApplication sharedApplication] delegate];
    UILabel *l;
    for (NSInteger i=0; i<[[scrollView subviews] count]; i++){
        l=[[scrollView subviews] objectAtIndex:0];
        [l removeFromSuperview];
        l=nil;
    }

    //Adding my new Labels

    CGPoint pt=CGPointMake(5,5);
    if ([[[mainDelegate messageFieldCaptions] objectAtIndex:0] length]>0){
        NSArray *p=[[[mainDelegate messageFieldCaptions] objectAtIndex:0] componentsSeparatedByString:@"|"];
        l= [self newLabelWithPrimaryColor:[mainDelegate navColor] selectedColor:[UIColor whiteColor] fontSize:12.0 bold:YES];
        if (m.sValue0.length>0) 
            l.text=[NSString stringWithFormat:@"%@ %@",[p objectAtIndex:0], m.sValue0];
        else
            l.text=[NSString stringWithFormat:@"%@ None",[p objectAtIndex:0]];

        [l setFrame:CGRectMake(pt.x,pt.y,310,20)];
        [scrollView addSubview:l];
        [l release];
        pt.y+=20;       
    }

    //This is done about 10 more times to add new labels.

}
4

1 回答 1

2

问题出在你的 for 循环中。当您删除标签时,[[scrollView subviews] count] 会减少,这意味着您不会获得所有标签,因为循环运行的次数少于标签的运行次数。

假设您有 5 个标签:

(比较时)
我 | [[scrollView 子视图] 计数]
==================================
0 | 5
1 | 4
2 | 3 <-- 循环在这里结束,因为 i+1 >= [[scrollView subviews] count]
3 | 2

您应该将初始计数保存到变量中并在 for 循环条件中使用它。由于您总是删除索引 0,因此您不必担心超出数组范围。

于 2009-05-29T16:26:36.830 回答