我最近嘗試使用Xcode中的MainStoryboard.storyboard,到目前爲止它非常好,我想知道爲什麼我以前從未使用它。在玩一些代碼的時候,我碰到了一個障礙,我不知道如何解決這個問題。故事板和自定義初始化
當我alloc和初始化一個新的視圖控制器(與我在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;
}
感謝。看起來瘋狂的是,蘋果公司沒有提供一種方法來創建一個適用於故事板的定製'init'方法。 – jowie
我不知道爲什麼會說:「如果你所有的initWithCustomData方法都設置了一個實例變量,你應該手動設置它(不需要自定義inits或額外的方法)」。沒有蘋果公司的文件說明,所以我建議任何讀者認爲這個陳述僅僅是一個意見,而不是一個遵循的規則。 iOS中的大量初始化器甚至只有一個參數。 – zumzum
@zumzum Apple在示例代碼中使用了在'prepareForSegue:sender:'方法中設置變量的做法。請參閱[EKReminderSuite]中的「AddTimedReminder.m」文件(https://developer.apple.com/library/prerelease/ios/samplecode/EKReminderSuite/Introduction/Intro.html#//apple_ref/doc/uid/TP40015203- Intro-DontLinkElementID_2)示例項目。 –