从StoryBoard中的ViewController调用ViewDidLoad两次



我想(从我的故事板)一个ViewController,我将能够从任何地方通过代码推送(这个ViewController将使用很多时间,所以我不想在故事板中添加大量的segue…)。

我还必须从当前ViewController传递一些变量到推送的一个。为此,我使用以下代码:

NBItemDetailsViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"ItemDetailsViewController"];
vc.item = self.selectedItem;
[self.navigationController pushViewController:vc animated:YES];

它几乎可以工作,但是在推送的ViewController中,viewDidLoad方法被调用两次。第一次,我可以得到项目,但第二次,它是空的。当然,看起来显示的ViewController是第二个调用之一,我不能得到我的项目。

你知道吗?有没有更好的选择,在StoryBoard中使用segue(我不敢相信在StoryBoard中没有办法重用ViewController…)?

PS:我已经尝试使用viewDidAppear.

你可以创建一个子类UIViewController (MyRegularViewController)和分配一个。xib (MyRegularViewController.xib)

File > New > File > User Interface > Empty

并拖动一个UIViewController到您的空xib文件。关联你的MyRegularViewController和xib,然后自定义它。

现在你可以在任何你想要的地方使用它,就像这样;

MyRegularViewController *regular = [[MyRegularViewController alloc] initWithNibName:@"MyRegularViewController" bundle:nil];
self.navigationController pushViewController:regular animated:YES];

你没有义务在所有情况下都使用故事板,事实上,在这种情况下使用你的故事板会弄乱你的故事板。只需使用一个xib和一个自定义类。

最新更新