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

Xamarin iOS - Load Storyboard Reference Programatically

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

Contacts.storyboard 我有一个 ViewController: ContactDetails.

关于 Activities.storyboard 我需要参考 Contacts.storyboard

中的 ContactDetails

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

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

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

但我没有像普通的视图控制器一样以编程方式加载

Foundation.MonoTouchException: Objective-C exception thrown. Name: NSInvalidArgumentException Reason: Storyboard () doesn't contain a view controller with identifier 'ContactDetails'

我知道它是这样工作的:

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

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

如果您使用情节提要 ID,它也可以用作 'restoration identifier' 并允许您从情节提要中实例化。我建议使用这种方法,它往往是实现您想要做的事情的最简单方法。

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

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

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

还值得注意的是,UIViewController 的 Xamarin iOS 'Storyboard' 属性 自动确定 Storyboard 引用,值得检查的是它确实为您带来了指向 'Contact' 故事板(因为在 iOS 开发中当然可以选择多个故事板。)

显然加载 Storyboard Reference 的唯一方法是使用 Segue.

以编程方式唯一的方法是实例化 Storyboard,然后实例化 ViewController

像这样:

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