UIScrollView - Добавление / удаление меток - PullRequest
0 голосов
/ 29 мая 2009

Я пытаюсь добавить / удалить UILabels в 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.

}

1 Ответ

2 голосов
/ 29 мая 2009

Проблема в вашем цикле for. Когда вы удаляете метки, [[scrollView subviews] count] уменьшается, что означает, что вы не получите доступ ко всем вашим меткам, поскольку цикл выполняется меньше раз, чем есть метки.

Представьте, что у вас было 5 ярлыков:

(At time of comparison)
i | [[scrollView subviews] count] 
=================================
0 | 5
1 | 4 
2 | 3 <-- loop ends here since i+1 >= [[scrollView subviews] count]
3 | 2 

Вы должны сохранить начальный счет в переменную и использовать его в своем цикле for. Поскольку вы всегда удаляете индекс 0, вам не нужно беспокоиться о выходе за пределы массива.

...