[英]What's a good way to remove all of the subviews of a 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]];
}
}
您提供的第一個示例是從UIScrollView
刪除子視圖的正確方法。
[scrollView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];
將subviews
設置為nil
有效地使管理子視圖的集合對象無效,從而無法添加新的子視圖。
以下是從滾動視圖中刪除所有子視圖的代碼:
for(UIView *subview in [scrollview subviews])
{
[subview removeFromSuperview];
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.