如何加载 Xamarin.iOS 中共享库项目中存在的第二个 Storyboard
How to load a second Storyboard that exist in a shared library project in Xamarin.iOS
我有一个包含 2 个项目的 Xamarin.iOS 解决方案。第一个是主 iOS 应用程序项目,第二个是 Xamarin.iOS 库项目。我在每个项目中都有一个故事板,在 iOS 项目中,故事板很简单,只有一个视图控制器,它的工作是初始化视图控制器并从库项目加载故事板。
这背后的原因是我们想要为特定客户创建品牌化的应用程序副本。所以主要的应用程序逻辑将在库项目中,主要的 iOS 应用程序包含客户端品牌应用程序的所有样式。
我在这方面取得了一定的成功。我可以通过在第一个故事板的 ViewDidAppear
方法中调用它来加载第二个故事板。
var sb = UIStoryboard.FromName("Storyboard", null);
var ctlr = sb.InstantiateInitialViewController();
this.PresentViewController(ctlr, true, null);
当我尝试为第二个故事板的 UIViewController
中的任何内容添加出口时,问题就来了。我收到以下错误:
Objective-C exception thrown. Name: NSUnknownKeyException Reason:
[<UIViewController 0x166d5120> setValue:forUndefinedKey:]: this class
is not key value coding-compliant for the key SecondText.
SecondText
是第二个故事板上 UITextField
的出口名称。
这可能不是实现我想要的最好方法,但我仍然感到困惑,为什么在将出口添加到视图控制器时此方法不起作用。
当第二个故事板在主 iOS 应用程序项目上时,不会发生此问题。
如果有人能对此有所说明,我们将不胜感激。我已经上传了我的测试项目,如果你想看的话。
https://github.com/kckc/testShareStoryboard
最后要注意的是,我注意到 ViewDidLoad
方法在库项目中时没有在第二个故事板的视图控制器上触发,这可能是它的原因吗?
而不是使用:
var ctlr = sb.InstantiateInitialViewController();
尝试按名称实例化第二个 viewcontroller:
UIStoryboard sb = UIStoryboard.FromName("Storyboard", null);
nameofsecondviewcontroller ctlr = sb.InstantiateViewController("nameofsecondviewcontroller") as nameofsecondviewcontroller;
PresentViewController(ctlr, true, null);
这应该使用第二个viewcontroller的设计器来初始化View的控件。
我有一个包含 2 个项目的 Xamarin.iOS 解决方案。第一个是主 iOS 应用程序项目,第二个是 Xamarin.iOS 库项目。我在每个项目中都有一个故事板,在 iOS 项目中,故事板很简单,只有一个视图控制器,它的工作是初始化视图控制器并从库项目加载故事板。
这背后的原因是我们想要为特定客户创建品牌化的应用程序副本。所以主要的应用程序逻辑将在库项目中,主要的 iOS 应用程序包含客户端品牌应用程序的所有样式。
我在这方面取得了一定的成功。我可以通过在第一个故事板的 ViewDidAppear
方法中调用它来加载第二个故事板。
var sb = UIStoryboard.FromName("Storyboard", null);
var ctlr = sb.InstantiateInitialViewController();
this.PresentViewController(ctlr, true, null);
当我尝试为第二个故事板的 UIViewController
中的任何内容添加出口时,问题就来了。我收到以下错误:
Objective-C exception thrown. Name: NSUnknownKeyException Reason:
[<UIViewController 0x166d5120> setValue:forUndefinedKey:]: this class
is not key value coding-compliant for the key SecondText.
SecondText
是第二个故事板上 UITextField
的出口名称。
这可能不是实现我想要的最好方法,但我仍然感到困惑,为什么在将出口添加到视图控制器时此方法不起作用。
当第二个故事板在主 iOS 应用程序项目上时,不会发生此问题。
如果有人能对此有所说明,我们将不胜感激。我已经上传了我的测试项目,如果你想看的话。
https://github.com/kckc/testShareStoryboard
最后要注意的是,我注意到 ViewDidLoad
方法在库项目中时没有在第二个故事板的视图控制器上触发,这可能是它的原因吗?
而不是使用:
var ctlr = sb.InstantiateInitialViewController();
尝试按名称实例化第二个 viewcontroller:
UIStoryboard sb = UIStoryboard.FromName("Storyboard", null);
nameofsecondviewcontroller ctlr = sb.InstantiateViewController("nameofsecondviewcontroller") as nameofsecondviewcontroller;
PresentViewController(ctlr, true, null);
这应该使用第二个viewcontroller的设计器来初始化View的控件。