UIScrollView - Добавление / Удаление меток
-
06-09-2019 - |
Вопрос
Я пытаюсь добавить / удалить 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.
}
Решение
Проблема в вашем цикле for.По мере удаления меток количество [[вложенных просмотров ScrollView]] уменьшается, что означает, что вы не доберетесь до всех своих меток, поскольку цикл выполняется меньше раз, чем меток.
Представьте, что у вас было 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, вам не нужно беспокоиться о выходе за пределы массива.
Не связан с StackOverflow