removeFromSuperview无法正常工作

时间:2012-04-26 16:24:02

标签: objective-c ios view

在课堂上

@interface StartScene : UIView

我调用

的实例
@interface HelpView : UIView {
    GameOverMenu* gorm;
    PlayScene* tView;
}

并使用addSubview。我这里也有很多代码

-(void) removemyself {
    [tView removeFromSuperview];
    [gorm removeFromSuperview];
    [self removeFromSuperview];
}

-(void)restartPlay {
    [tView removeFromSuperview];
    [self playSceneDidLoad];
}

-(void)gameOverDidLoad {
    [tView removeFromSuperview];
    gorm = [[GameOverMenu alloc]initWithFrame:CGRectMake(0, 0, 320, 520)];
    gorm.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"backGround.jpg"]];
    [gorm checkScore:Scores];
    [self addSubview:gorm];
}

-(void)playSceneDidLoad {
    [gorm removeFromSuperview];
    tView = [[PlayScene alloc]initWithFrame:CGRectMake(0, 0, 320, 520)];
    tView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"backGround.jpg"]];
    [self addSubview:tView];
    [tView ooneFingerTwoTaps];
}

HelpView的两个子类:

@interface PlayScene : HelpView

@interface GameOverMenu : HelpView <UITextFieldDelegate>

StartScene中按下按钮时,会创建HelpView的实例并调用init方法playSceneDidLoad

PlayScene内,有一个调用restartPlay方法的重启按钮。当游戏丢失时gameOverDidLoad方法被调用。

PlaySceneGameOverMenu中都有退出按钮,它调用removemyself方法,应该将玩家返回主菜单。

乍一看它应该可以正常工作,但是如果我按下重启按钮几次而不是尝试按退出,则会发现视图没有从超视图中删除,只需按一下退出按钮,现在只删除它们一个一。 我们停在HelpView上,它没有自行删除(即使我尝试在某个地方调用[super removeFromSuperview];

我需要及时正确删除视图,并在按下quit时进入主菜单(StartScene)。我不认为很多观点相互涵盖是一个很好的变体。有什么问题?

1 个答案:

答案 0 :(得分:0)

我发生的重点是,如果从子类调用超类'方法并且有这样的命令[self removeFromSuperview];[(someOtherSubview) removeFromSuperview];,则它是使用self或(someOtherSubview)的子类。如果我们的子类没有指向的subView,那么命令就什么都不做。如果有[self removeFromSubview];,子类将自行删除。

实际上我通过使用按钮作为超类的子视图解决了这个问题。