Я создаю игру на XCode, в которой есть меню с кнопками для условий настройки (т. Е. «Воспроизвести до 30», «Воспроизвести до 20» и т. Д.). Я хочу, чтобы эти кнопки создавали сегмент с тем же ViewController
, у которого была моя игра, с той лишь разницей, сколько очков должно быть достигнуто до окончания игры. Это слишком неэффективно, чтобы иметь кратность одного и того же 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? Когда я создал свой проект, я решил отменить выбор. @Benjamin – user2480376
Да, просто добавьте пользовательский инициализатор в контроллер игрового представления, но используйте self = [super init]; вместо этого остальное одно и то же, если вы хотите, я могу опубликовать еще один ответ, который объясняет более подробно. –
Думаю, я понял. Благодаря! – user2480376
Если вы перейдете к новому контроллеру представления, создается экземпляр - если вы вернетесь, этот контроллер просмотра будет освобожден. – JDS