2013-06-21 55 views
0

我在XCode上创建了一个包含设置条件按钮(即“播放到30”,“播放到20”等)的菜单的游戏。我想让这些按钮创建一个与我的游戏相同的ViewController,唯一的区别是游戏结束前必须达到多少点。对于每个设置而言,相同的ViewController的倍数效率太低。有没有解决的办法?使用不同的按钮来访问相同的ViewController

+0

如果您继续使用新的视图控制器,则会创建一个实例 - 如果您返回,则会取消分配此视图控制器。 – JDS

回答

0

在您的游戏视图控制器为使创建自定义的初始化:

// add in GameViewController.m 
@implementation GameViewController 
-(id)initWithLimit:(int)limit { 
    self = [super initWithNibName:@"NibName" bundle:nil]; 
    if (self) { 
     _limit = limit; 
    } 
    return self; 
} 

// add in GameViewController.h 
@interface GameViewController : UIViewController 
@property (nonatomic) int limit; 
@end 

执行菜单的按钮动作像这样:

-(IBAction)play30 { 
    GameViewController *game = [[GameViewController alloc] initWithLimit:30]; 

    // Handle game view here. 
} 

这个答案假定您创建GameViewController时的新实例用户点击按钮。 如果你不希望每个按钮录音,那么你可以创建你的菜单视图控制器GameViewController属性,并使用延迟实例为游戏视图控制器的时间来实例化一个新的ViewControllerSubclass:

- (GameViewController *)game { 
     if (!_game) _game = ...; 
     return _game; 
} 

-(IBAction)play20 { 
    // Assuming game is a property. 
    self.game.limit = 20; 

    // Perform setup that expects the limit property to be set. 
    [self.game setup]; 

    // Handle game view here. 
} 

希望这有助于:)

+0

有没有办法做到这一点没有nib文件?当我创建我的项目时,我决定取消选择该选项。 @Benjamin – user2480376

+0

是的,只需将自定义初始化程序添加到游戏视图控制器中,但使用self = [super init];相反,其余的是相同的,如果你想我可以发布另一个解释更深入的答案。 –

+0

我想我明白了。谢谢! – user2480376

相关问题