簡體   English   中英

子類化UIViewController的子類加載問題

[英]Subclassing a subclass of UIViewController load issue

所以,這就是問題。 我對iOS編程還比較陌生,因此我承擔了一個巨大的項目。

我正在開發具有多個基本遵循相同模式的關卡,但具有不同的精靈圖像和值的游戲,我只是為了提高速度而決定在IB中布置所有關卡(我不一定知道最佳做法,但和我一起工作)。 每個“級別”都有自己的視圖控制器,類似於“ FireLevel1ViewController”,“ FireLevel2ViewController”等。所有這些視圖控制器均繼承自我創建的UIViewController的自定義子類,稱為“ GameController”。

我的問題是,當我在測試設備上打開每個關卡時,將在子類控制器的init或viewDidLoad方法之前調用GameController的viewDidLoad,因此沒有任何關卡圖像/值被分配給超類屬性。 具體來說,我有一個暫停菜單,應該在關卡開始時將其隱藏(我正在GameController的viewDidLoad中執行setHidden),但是由於GameController的viewDidLoad在FireLevel1有機會將正確的IB屬性與PauseMenu關聯之前運行,所以GameController只是隱藏了一個空的視圖,並且實際的PauseMenu永遠不會被隱藏。

我可能在這里遇到了多個問題,但是大多數情況下,我認為我並沒有真正正確地理解如何對UIViewController的子類進行子類化以及如何使第二個子類的屬性/值/圖像在第一個子類的方法中起作用。

非常感謝您的幫助! 我希望這個問題有道理...

GameController的代碼:

@implementation GameController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self)
{
    // Custom initialization
}
return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];

    [self.view addSubview:pauseMenu];
    [pauseMenu addSubview:helpMenu];

    //Hides the pause and help menus until their respective buttons are pressed
    [pauseMenu setHidden:YES];
    [helpMenu setHidden:YES];
    isPaused = NO;
}

FireLevel1Controller的代碼:

-(id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{

    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];

    if(self)
    {
           theMainview = mainview;
           theScene = scene;
           theBG = bg;
           theHudView = hud;
           thePauseView = pauseMenu;
           theHelpView = helpMenu;
    }

return self;
}


-(void)viewDidLoad
{

    [super viewDidLoad];
    firstTurret = [[StationaryEnemy alloc]init:turretImage1 baseView:base1];
    secondTurret = [[StationaryEnemy alloc]init:turretImage2 baseView:base2];

    NSLog(@"I'm in view did load");

}

您嘗試使用viewWillAppear嗎? 在初始化所有可見的UI元素之后,應調用該方法。

我知道了-我不小心否定了變量。 我應該一直在做mainview = TheMainview; 而不是Mainview = mainview-我只是將它們全部分配為零。 我也將它們全部從init移到了viewDidLoad中,並將[super viewDidLoad]移到了它們的下面,現在它可以完美地工作了!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM