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