[英]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.