来自StoryBoard的ViewController使ViewDidLoad调用了两次

时间:2013-05-24 23:34:06

标签: ios storyboard segue viewcontroller viewdidload

我想(从我的StoryBoard)制作一个ViewController,我可以通过代码从任何地方推送(这个ViewController将会花费很多时间,所以我不想添加大量的segues在StoryBoard ......)。

我还必须将一些变量从当前的ViewController传递给推送的一个。 要做到这一点,我正在使用此代码:

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

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

有什么想法吗? 有没有更好的选择,在StoryBoard中使用segues(我无法相信在StoryBoard中无法重用ViewController ......)?

PS:我已经尝试过使用viewDidAppear。

1 个答案:

答案 0 :(得分:1)

您可以创建UIViewController(MyRegularViewController)的子类并通过(MyRegularViewController.xib)分配.xib

File > New > File > User Interface > Empty

并将UIViewController拖到您的emtpy xib文件中。将MyRegularViewController与该xib相关联,然后对其进行自定义。

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

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

在所有情况下,您没有义务使用故事板,事实上使用故事板来处理这种情况会使您的故事板变得混乱。只需使用xib和自定义类即可。