Ios 使用不同的按钮访问同一个ViewController

Ios 使用不同的按钮访问同一个ViewController,ios,xcode,button,viewcontroller,Ios,Xcode,Button,Viewcontroller,我正在XCode上创建一个游戏,它有一个菜单,菜单上有设置条件的按钮(例如,“玩到30”,“玩到20”,等等)。我想让这些按钮创建一个与我的游戏相同的ViewController,唯一的区别是在游戏结束前必须获得多少积分。对于每个设置,使用多个相同的ViewController,效率太低。有办法解决这个问题吗 在游戏视图控制器中创建自定义初始值设定项,如下所示: // add in GameViewController.m @implementation GameViewController -

我正在XCode上创建一个游戏,它有一个菜单,菜单上有设置条件的按钮(例如,“玩到30”,“玩到20”,等等)。我想让这些按钮创建一个与我的游戏相同的
ViewController
,唯一的区别是在游戏结束前必须获得多少积分。对于每个设置,使用多个相同的
ViewController
,效率太低。有办法解决这个问题吗

在游戏视图控制器中创建自定义初始值设定项,如下所示:

// 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的新实例。 如果不希望每次录制按钮时都实例化新的ViewControllerSubclass,则可以在菜单“视图控制器”中创建GameViewController属性,并对游戏视图控制器使用惰性实例化:

 - (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.
}

希望这对您有所帮助:)

如果您选择一个新的视图控制器,则返回时会创建一个实例,此视图控制器将被解除分配。有没有办法在没有nib文件的情况下执行此操作?当我创建项目时,我决定取消选择该选项@Benjaminyes,只需将自定义初始值设定项添加到游戏视图控制器,但使用self=[super init];相反,其余的都是一样的,如果你愿意,我可以发布另一个更深入的答案。