所以,这就是问题所在。我对iOS编程比较陌生,而且我已经开始了一个巨大的项目。
我正在开发一个多层次的游戏,基本上遵循相同的模式,但有不同的精灵图像和值,我只是为了速度而决定在IB中列出所有级别(不一定是最佳实践,我知道,但与我合作)。每个“级别”都有自己的视图控制器,沿着“FireLevel1ViewController”,“FireLevel2ViewController”等等。所有这些视图控制器都继承自我创建的名为“GameController”的UIViewController的自定义子类。
我的问题是,当我在我的测试设备上打开每个级别时,GameController的viewDidLoad在我的子类控制器的init或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");
}
答案 0 :(得分:0)
您尝试使用viewWillAppear
了吗?应该在所有可见的UI元素初始化之后调用该方法。
答案 1 :(得分:0)
啊,我明白了 - 我不小心否定了我的变数。我应该一直在做mainview = theMainview;而不是theMainview = mainview - 我只是将它们全部归零。我还将它们从init中移出到viewDidLoad中,并在它们下面移动了[super viewDidLoad],现在它完美无缺!