2012-04-26 110 views
1

removeFromSuperview不能正常工作

@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方法,它們應該將播放器返回到主菜單。

乍一看它應該可以正常工作,但如果我按幾次重新啓動按鈕並嘗試按退出,就會發生視圖未從超級視圖中刪除,現在只有一次按下退出按鈕纔會將它們刪除一個。 我們在幫助視圖上停下來,它並沒有自行移除(即使我試圖在某處調用[super removeFromSuperview];

我需要及時移除正確的視圖並在按下退出時進入主菜單(StartScene) 。我不認爲覆蓋對方的很多觀點是一個很好的變種。問題是什麼?

回答

0

那麼我發現,重點是,如果超類的方法是從子類調用,並有這樣的一個命令[self removeFromSuperview];[(someOtherSubview) removeFromSuperview];,它是使用self或(someOtherSubview)的子類。如果我們的子類沒有指向的子視圖,那麼命令將不會執行任何操作。如果有[self removeFromSubview];,子類會自行刪除。

其實我通過使用按鈕作爲超類的子視圖來解決這個問題。