1

在班上

@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我按下按钮时,会创建一个实例并调用HelpViewinit 方法。playSceneDidLoad

里面PlayScene有调用restartPlay方法的重启按钮。游戏失败时gameOverDidLoad调用方法。

并且在两者PlaySceneGameOverMenu都有退出按钮,它调用removemyself方法,应该将播放器返回到主菜单。

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

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

4

1 回答 1

0

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

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

于 2012-05-04T17:42:18.343 回答