簡體   English   中英

刪除UIScrollView的所有子視圖的好方法是什么?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM