2013-06-21 3 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 когда это пользователь нажимает кнопку. , если вы не хотите создавать новый 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. 
} 

Надежда это помогло :)

+0

Есть ли способ сделать это без файлов nib? Когда я создал свой проект, я решил отменить выбор. @Benjamin – user2480376

+0

Да, просто добавьте пользовательский инициализатор в контроллер игрового представления, но используйте self = [super init]; вместо этого остальное одно и то же, если вы хотите, я могу опубликовать еще один ответ, который объясняет более подробно. –

+0

Думаю, я понял. Благодаря! – user2480376