我有2个故事板:Activities.storyboard
和Contacts.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);
但我想使用参考视图控制器,是否可能?
答案 0 :(得分:1)
如果您使用Storyboard ID,它还可以用作“恢复标识符”,并允许您从故事板中进行实例化。我建议使用这种方法,它往往是实现你想要做的最简单的方法。
还值得注意的是,你必须将实例化的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);