在类里面
@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
方法,应该让玩家返回到主菜单.
乍一看它应该工作正常,但是如果我多次按下重启按钮而不是尝试按下退出,会发生 View 没有从 super View 中删除,按退出按钮现在只会删除它们一个一。
我们停在 HelpView 上,它没有自行删除(即使我尝试在某处调用 [super removeFromSuperview];
。
我需要及时正确地删除 View ,并在按下退出时进入主菜单 (StartScene)。我不认为很多观点相互覆盖是一个很好的变体。有什么问题?
最佳答案
好吧,我发现重点是如果从子类调用父类(super class)的方法并且有这样的命令 [self removeFromSuperview];
或 [(someOtherSubview) removeFromSuperview];
,是子类使用了self或者(someOtherSubview)。如果我们的子类没有指向的 subview ,则该命令将不执行任何操作。如果存在 [self removeFromSubview];
,子类将删除自身。
实际上我通过使用按钮作为父类(super class)的 subview 解决了这个问题。
关于objective-c - removeFromSuperview 不能正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10337446/