2013-07-03 97 views
0

我被困在隱藏的問題中。我想從Superview中刪除所有UIProgressView。我以這種方式創建跨按鈕,無法在點擊「交叉」按鈕後從超級視圖中刪除UIProgressView?

crossButton = [[CCMenuItemImage alloc] initWithNormalSprite:[CCSprite spriteWithSpriteFrame:[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:@"close-bttn.png"]] selectedSprite:nil disabledSprite:nil block:^(id sender) 
            { 
             [self hideProgressBarForDownload]; 
             [[NSNotificationCenter defaultCenter] postNotificationName:kNotificationInAppLayerClosed object:self userInfo:nil]; 
             [[GameManager sharedGameManager]setCurrentLayer:-1]; 
             [self removeFromParentAndCleanup:YES]; 
            }]; 

雖然被點擊時,下面的方法調用的層次結構

-(void) hideProgressBarForDownload 
{ 
    [[DownloadManager sharedDownloadManager]removeAllProgressbarsIfvisible]; 
} 

-(void)removeAllProgressbarsIfvisible 
{ 
    NSArray * allkeys = [currentDownloads allKeys]; 

    for (int i = 0; i < [allkeys count]; i++) 
    { 
     NSString *key = [allkeys objectAtIndex:i]; 
     DownloadItem * item = [currentDownloads valueForKey:key]; 
     UIProgressView * progress = item.progressIndicator; 
     //progress.hidden = YES; 
     if (progress.superview) 
     { 
      [progress removeFromSuperview]; 
     } 
    } 
} 

我想每一段代碼是正確的,但不知道爲什麼他們並沒有刪除。

在此先感謝。

+0

刪除if(progress.superview)並查看它是否有效? – hariszaman

+0

你的代碼對我來說也很合理。進度視圖是如何創建和連接到下載項目的?你有沒有嘗試調試'removeAllProgressbarsIfvisible'? 'progress'有沒有與null不同的值? –

回答

1

嘗試像這樣,在把這個代碼

for(UIView *view in self.view.subviews){ 
     if([view isKindOfClass:[UIProgressView class]])) 
      [view removeFromSuperView]; 
    } 
+0

只有在所有進度視圖都是self.view的下一個級別的直接子視圖時,這纔有效。如果進度視圖是子視圖的子視圖,那麼你的代碼不會刪除它們。 –

+0

如果您沒有直接添加進度條,請將yourview.subviews放在self.view.subviews的位置。 – Balu

+0

或以遞歸方式搜索進度視圖子視圖。 –

0

取下一個給定的視圖所有進度欄按鈕操作的操作方法:

- (void) removeAllProgressBars:(UIView *)view { 

    if([view isKindOfClass:[UIProgressView class]])) 
     [view removeFromSuperView]; 
    else 
     for (UIView *subView in view.subviews) 
     [self removeAllProgressBars:view]; 
} 

在其他一些方法調用:

[self removeAllProgressBars:self.view]; 

雖然我認爲它不好的編碼風格不使用捲曲breackets在1聲明身體的一個d if和else等。

相關問題