我有 2 个 Storyboard:Activities.storyboard
和 Contacts.storyboard
。
在 Contacts.storyboard
上,我有一个 ViewController:ContactDetails
。
在Activities.storyboard
上,我需要引用Contacts.storyboard
中的ContactDetails
我在 Activities.storyboard
上创建了一个 Storyboard Reference
并引用了 ContactDetails
。
我尝试以编程方式加载此 View Controller
var viewController = Storyboard.InstantiateViewController(nameof(ContactDetails));
NavigationController.PushViewController(viewController, true);
但是我没有像普通 View Controller 那样以编程方式加载
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);
但是我想使用引用 View Controller ,可以吗?
最佳答案
如果您使用 Storyboard ID,它也可以用作“恢复标识符”,并允许您从 Storyboard 进行实例化。我建议使用这种方法,它往往是实现您想要做的事情的最简单方法。
还值得注意的是,您必须将实例化的 UIViewController 转换为它的类型(至少我发现如果我想传递变量等,它会让生活变得更容易。)
ContactDetails viewController = Storyboard.InstantiateViewController(nameof(ContactDetails)) as ContactDetails;
或者
ContactDetails viewController = Storyboard.InstantiateViewController("ContactDetails") as ContactDetails;
还值得注意的是,UIViewController 的 Xamarin iOS“Storyboard”属性会自动确定 Storyboard 引用,并且值得检查它是否确实为您带来了指向“Contact”storyboard 的指针(因为多个 Storyboard 当然可以在iOS 开发应该你选择。)
关于ios - Xamarin iOS - 以编程方式加载 Storyboard引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42904487/