在班上
@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
的实例,并在初始化方法中调用playSceneDidLoad
。在
PlayScene
中,有一个重新启动按钮,它调用restartPlay
方法。当游戏失败时,将调用gameOverDidLoad
方法。在
PlayScene
和GameOverMenu
中都有退出按钮,该按钮调用removemyself
方法,该按钮应该使播放器返回主菜单。乍一看,它应该可以正常工作,但是如果我按了几次“重启”按钮,而不是尝试按“退出”,就会出现视图没有从超级视图中删除的情况,一按退出按钮,现在只能一一删除它们。
而且我们停在HelpView上,它没有将其自身删除(即使我尝试在某个地方调用
[super removeFromSuperview];
。我需要及时正确地删除视图,并在按quit时进入主菜单(StartScene)。我认为,很多相互覆盖的观点不是很好的选择。问题是什么?
最佳答案
好吧,我的意思是,如果从子类中调用超类的方法,并且有这样的命令[self removeFromSuperview];
或[(someOtherSubview) removeFromSuperview];
,则是使用self或(someOtherSubview)的子类。如果我们的子类没有指向的subView,则该命令将不执行任何操作。如果存在[self removeFromSubview];
,则子类将自身删除。
实际上,我通过使用按钮作为超类的子视图解决了这个问题。
关于objective-c - removeFromSuperview无法正常工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10337446/