繁体   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