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

时间:2017-03-20 13:10:40

标签: ios xamarin xamarin.ios storyboard-reference

我有2个故事板:Activities.storyboardContacts.storyboard

Contacts.storyboard上我有一个ViewController:ContactDetails

Activities.storyboard我需要参考ContactDetails

中的Contacts.storyboard

我在Storyboard Reference上创建了Activities.storyboard并引用了ContactDetails

我尝试以编程方式加载此View Controller

var viewController = Storyboard.InstantiateViewController(nameof(ContactDetails));
NavigationController.PushViewController(viewController, true);

但是我没有像普通的View Controller那样以编程方式加载

  

Foundation.MonoTouchException:抛出Objective-C异常。名称:   NSInvalidArgumentException原因:Storyboard()不包含带标识符的视图控制器   'ContactDetails'

我知道它的工作原理如下:

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

但我想使用参考视图控制器,是否可能?

2 个答案:

答案 0 :(得分:1)

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

enter image description here

还值得注意的是,你必须将实例化的UIViewController转换为它的类型(至少我发现如果我想传递变量等,它会让生活更轻松。)

ContactDetails viewController = Storyboard.InstantiateViewController(nameof(ContactDetails)) as ContactDetails;

OR

ContactDetails viewController = Storyboard.InstantiateViewController("ContactDetails") as ContactDetails;

值得注意的是,UIViewController的Xamarin iOS“Storyboard”属性会自动确定Storyboard引用,值得检查的是它肯定会为您提供指向“联系人”故事板的指针(因为多个故事板当然可以在你应该选择iOS开发。)

答案 1 :(得分:0)

显然加载Storyboard参考的唯一方法是使用 Segue

以编程方式唯一的方法是实例化Storyboard并在实例化ViewController

之后

像这样:

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