Недавно я попробовал работать с MainStoryboard.storyboard в Xcode и пока все идет хорошо, и мне интересно, почему я никогда не использовал его раньше. Во время игры с некоторым кодом я столкнулся с препятствием, и я не знаю, как это разрешить.Раскадровка и пользовательский init
Когда я Alloc и инициализировать новый ViewController (с пользовательской инициализации я объявлен в классе ViewControllers) Я хотел бы сделать что-то вроде этого:
ViewController *myViewController = [[ViewController alloc] initWithMyCustomData:myCustomData];
Тогда после того, что я мог бы сделать что-то вроде:
[self presentViewController:myViewController animated:YES completion:nil];
Когда я работаю с раскадрой, мне стало известно, что для перехода на автономный ViewController требуется идентификатор.
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
ViewController *myViewController = [storyboard instantiateViewControllerWithIdentifier:@"MyViewControllerIdentifier"];
[self presentViewController:myViewController animated:YES completion:nil];
Как я могу использовать свою пользовательскую инициализацию для myViewController при использовании раскадровки?
Это нормально, чтобы просто сделать что-то вроде этого:
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
ViewController *myViewController = [storyboard instantiateViewControllerWithIdentifier:@"MyViewControllerIdentifier"];
myViewController.customData = myCustomData;
[self presentViewController:myViewController animated:YES completion:nil];
//MyViewController.m
- (id) initWithMyCustomData:(NSString *) data {
if (self = [super init]) {
iVarData = data;
}
return self;
}
Спасибо. Кажется сумасшедшим, что Apple не предоставляет способ создания надлежащего пользовательского метода 'init' со Storyboards. – jowie
Не знаю, почему можно было бы заявить: «Если весь ваш метод initWithCustomData установлен, задается одна переменная экземпляра, вы должны просто установить его вручную (без каких-либо индивидуальных или дополнительных методов)». В Apple нет документов, в которых говорится, что я бы посоветовал любому читателю считать это утверждение простым мнением, а не правилом следовать. Множество инициализаторов в iOS принимают даже один аргумент. – zumzum
@zumzum Apple использует практику установки переменных в методе «prepareForSegue: sender:» в своем примере кода. См. Файл AddTimedReminder.m в [EKReminderSuite] (https://developer.apple.com/library/prerelease/ios/samplecode/EKReminderSuite/Introduction/Intro.html#//apple_ref/doc/uid/TP40015203- Intro-DontLinkElementID_2) пример для примера. –