Xamarin iOS-以编程方式加载故事板参考

Xamarin iOS-以编程方式加载故事板参考,ios,xamarin,xamarin.ios,storyboard-reference,Ios,Xamarin,Xamarin.ios,Storyboard Reference,我有两个情节提要:活动。情节提要和联系人。情节提要 在Contacts.storyboard上,我有一个ViewController:ContactDetails 在Activities.storyboard中,我需要参考Contacts.storyboard 我在活动上创建了一个情节提要参考,并引用了联系人详细信息 我尝试以编程方式加载这个视图控制器 var viewController = Storyboard.InstantiateViewController(nameof(Contac

我有两个情节提要:
活动。情节提要
联系人。情节提要

Contacts.storyboard
上,我有一个ViewController:
ContactDetails

Activities.storyboard
中,我需要参考
Contacts.storyboard

我在
活动上创建了一个
情节提要参考
,并引用了
联系人详细信息

我尝试以编程方式加载这个视图控制器

var viewController = Storyboard.InstantiateViewController(nameof(ContactDetails));
NavigationController.PushViewController(viewController, true);
但我并没有像普通视图控制器那样以编程方式加载

Foundation.MonoTouchException:引发Objective-C异常。姓名: NSInvalidArgumentException原因:情节提要()不包含标识符为的视图控制器 “联系人详细信息”

我知道它是这样工作的:

var storyboard = UIStoryboard.FromName(nameof(Contact), null);
var viewController = storyboard.InstantiateViewController(nameof(ContactDetails));
NavigationController.PushViewController(viewController, true);

但是我想使用一个参考视图控制器,可以吗?

如果您使用情节提要ID,它也可以用作“恢复标识符”,并允许您从情节提要实例化。我建议使用这种方法,它往往是实现你想要做的事情的最简单的方法

还值得注意的是,您必须将实例化的UIViewController强制转换为它的类型(至少我发现,如果我想传递变量之类的内容,这会使工作更轻松。)


还值得注意的是,UIViewController的Xamarin iOS“Storyboard”属性会自动确定Storyboard引用,值得检查的是,它确实会将指针指向“联系人”故事板(如果您选择,在iOS开发中当然可以有多个故事板)显然,加载情节提要引用的唯一方法是使用Segue

以编程方式唯一的方法是实例化
情节提要
,然后实例化
视图控制器

像这样:

var storyboard = UIStoryboard.FromName(nameof(Contact), null);
var viewController = storyboard.InstantiateViewController(nameof(ContactDetails));
NavigationController.PushViewController(viewController, true);

我相当确定,在尝试从应用程序情节提要实例化时,更常见的是使用名为“情节提要ID”的UIViewController属性,该情节提要ID还可以用作“恢复标识符”。我认为我的表达不正确。我有2个故事板,我需要将一个ViewController从一个引用到另一个。请看我的版本。我尝试了Cast,但没有成功。好吧,请向我解释一下使用上面提到的代码有什么问题。在我看来,这很好,您创建了对要访问的情节提要的引用,然后实例化了viewcontroller。我觉得我好像不明白你为什么不能那样做?
ContactDetails viewController = Storyboard.InstantiateViewController("ContactDetails") as ContactDetails;
var storyboard = UIStoryboard.FromName(nameof(Contact), null);
var viewController = storyboard.InstantiateViewController(nameof(ContactDetails));
NavigationController.PushViewController(viewController, true);