Xamarin iOS - 以编程方式加载故事板参考
Xamarin iOS - Load Storyboard Reference Programatically
我有 2 个故事板:Activities.storyboard
和 Contacts.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);
我有 2 个故事板:Activities.storyboard
和 Contacts.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);