0

我有一個滾動視圖,我需要經常在我的應用程序運行時重新加載內容。現在,我使用下面的代碼行再次加入他們之前刪除子視圖:什麼是刪除UIScrollView的所有子視圖的好方法?

[scrollView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)]; 

我應該使用,而不是下面的?

scrollView.subviews = nil; 

出於某種原因,第一行代碼似乎每運行16次就會使應用程序崩潰。我是否在某處泄漏了記憶?下面的方法需要一個視圖數組,滾動條(這是一個常量)和方向。

編輯:

- (void)loadViews:(NSArray *)views IntoScroller:(UIScrollView *)scroller withDirection:(NSString *)direction{ 
//Set up the scrollView 

[scrollView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)]; 

if([direction isEqualToString:@"horizontal"]){ 
    scrollView.frame = CGRectMake(0, 0, 1024, 768); 
    scrollView.contentSize = CGSizeMake(scrollView.frame.size.width * [[NSNumber numberWithUnsignedInt:[views count]] floatValue], scrollView.frame.size.height); 
}else if([direction isEqualToString:@"vertical"]){ 
    scrollView.frame = CGRectMake(0, 0, 1024, 768); 
    scrollView.contentSize = CGSizeMake(scrollView.frame.size.width, scrollView.frame.size.height * [[NSNumber numberWithUnsignedInt:[views count]] floatValue]); 
} 

for (int i=0; i<[[NSNumber numberWithUnsignedInt:[views count]] intValue]; i++) { 

    [[[views objectAtIndex:[[NSNumber numberWithInt:i] unsignedIntValue]] view] setFrame:scrollView.frame]; 

    if([direction isEqualToString:@"horizontal"]){ 
     [[[views objectAtIndex:[[NSNumber numberWithInt:i] unsignedIntValue]] view] setFrame:CGRectMake(i * [[views objectAtIndex:[[NSNumber numberWithInt:i] unsignedIntValue]] view].frame.size.width, 0, scrollView.frame.size.width, scrollView.frame.size.height)];//CGRectMake(i * announcementView.view.frame.size.width, -scrollView.frame.origin.x, scrollView.frame.size.width, scrollView.frame.size.height)]; 
    }else if([direction isEqualToString:@"vertical"]){ 
     [[[views objectAtIndex:[[NSNumber numberWithInt:i] unsignedIntValue]] view] setFrame:CGRectMake(0, i * [[views objectAtIndex:[[NSNumber numberWithInt:i] unsignedIntValue]] view].frame.size.height, scrollView.frame.size.width, scrollView.frame.size.height)]; 
    } 

    [scrollView addSubview:[[views objectAtIndex:[[NSNumber numberWithInt:i] unsignedIntValue]] view]]; 
} 

}

回答

4

,你給是從UIScrollView刪除子視圖的正確方法的第一個例子。

[scrollView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)]; 

設置subviewsnil有效尼爾斯時的集合對象管理的子視圖,從而不可能增加新的子視圖。

+0

我還在內存泄漏什麼的。我哪裏可能會出錯? – Moshe 2010-11-28 03:33:57

1

下面是刪除從滾動視圖的所有子視圖代碼:

for(UIView *subview in [scrollview subviews]) 
     { 
     [subview removeFromSuperview]; 

     } 
相關問題