2013-07-03 38 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等。

相关问题