我想(从我的故事板)一个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和一个自定义类。