如何加载 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的控件。