removeFromSuperview 无法正常工作
Posted
技术标签:
【中文标题】removeFromSuperview 无法正常工作【英文标题】:removeFromSuperview doesn't work properly 【发布时间】:2012-04-26 16:24:02 【问题描述】:在课堂上
@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
方法被调用。
在PlayScene
和GameOverMenu
中都有退出按钮,它调用removemyself
方法,应该让玩家返回主菜单。
乍一看它应该可以正常工作,但是如果我多次按下重新启动按钮而不是尝试按下退出,则会发生视图没有从超级视图中删除,现在只需按下退出按钮即可删除它们一。
我们停在 HelpView 上,它并没有自行删除(即使我尝试在某个地方调用 [super removeFromSuperview];
。
我需要及时正确地删除视图,并在按下退出时进入主菜单 (StartScene)。我不认为很多观点相互覆盖是一个好的变体。有什么问题?
【问题讨论】:
【参考方案1】:好吧,我发现关键是如果从子类调用超类的方法并且有这样的命令[self removeFromSuperview];
或[(someOtherSubview) removeFromSuperview];
,它是使用self 或(someOtherSubview)的子类。如果我们的子类没有指向的 subView,那么该命令将什么也不做。如果有[self removeFromSubview];
,子类会自行移除。
实际上我通过使用按钮作为超类的子视图解决了这个问题。
【讨论】:
以上是关于removeFromSuperview 无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章
在多个窗口上处理视图 - 第二个窗口关闭时 removeFromSuperView 的问题