2009-05-29 19 views
0

UILabelsをScrollViewに追加/削除しようとしています。追加はうまくいきますが、新しいラベルを追加する前にラベルを削除することはできません。この状況で誰かに光を当てることはできますか?UIScrollView - ラベルの追加/削除

-(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. 

} 
+0

これについての非常に奇妙なことは、ラベルの約2分の1が削除されている間、他の人はそうではありません...とても奇妙なことです。 – Dutchie432

答えて

2

問題はあなたのforループにあります。ラベルを削除すると、[[scrollView subviews] count]が減少します。これは、ループの実行時間がラベルよりも短いため、すべてのラベルを取得できないことを意味します。あなたは、変数に初期カウントを保存し、ループの状態でそれを使用する必要があり

(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 

は、あなたが5つのラベルを持っていた想像してみてください。常にインデックス0を削除しているので、配列の境界から外れることについて心配する必要はありません。

+0

うわー。私は長い週を過ごしたに違いない。それは今明らかになった:) – Dutchie432

+0

PSそれを修正しました。 :) – Dutchie432

関連する問題