Xamarin.ios 如何在AppDelegate.cs中使用带有插座的单独XIB的UIViewController?出口总是空的
奇怪的事。我想我以前做过,但似乎不再管用了。 现在的环境是:Lion、MT4.1、MD2.6RC、Xcode 3的接口生成器Xamarin.ios 如何在AppDelegate.cs中使用带有插座的单独XIB的UIViewController?出口总是空的,xamarin.ios,Xamarin.ios,奇怪的事。我想我以前做过,但似乎不再管用了。 现在的环境是:Lion、MT4.1、MD2.6RC、Xcode 3的接口生成器 我有一个通用应用程序(来自MonoDevelop的模板) 我把它改成了一个AppDelegateBase类,iPhone和iPad的应用程序委托都从这个类继承 有一个MasterController.xib文件包含UITabBarController 在IB中,我将该XIB的文件所有者设置为AppDelegateBase 我添加了一个UITabBarController
- 我有一个通用应用程序(来自MonoDevelop的模板)
- 我把它改成了一个
类,iPhone和iPad的应用程序委托都从这个类继承AppDelegateBase
- 有一个MasterController.xib文件包含
UITabBarController
- 在IB中,我将该XIB的文件所有者设置为
AppDelegateBase
- 我添加了一个
插座,并将其连接到相应的控制器UITabBarController
- 在MasterController.xib.designer.cs中,我可以看到连接在那里。这就是MasterController.xib.designer.cs的外观:
//基本类型可能应该是MonoTouch.UIKit.UIViewController或子类
[基础]登记(“AppDealTeaBase]”)
公共部分类AppDelegateBase{
private MonoTouch.UIKit.UITabBarController __mt_oTabBarController; [MonoTouch.Foundation.Connect("oTabBarController")] private MonoTouch.UIKit.UITabBarController oTabBarController { get { this.__mt_oTabBarController = ((MonoTouch.UIKit.UITabBarController)(this.GetNativeField("oTabBarController"))); return this.__mt_oTabBarController; } set { this.__mt_oTabBarController = value; this.SetNativeField("oTabBarController", value); } } }
this.oTabBarController
总是空的。这里怎么了?
与早期项目唯一不同的是,我有一个额外的XIB,其中包含一个控制器,我将在iPhone和iPad中使用,因此不想在iPhone和iPad的XIB中重复
在对MasterController.xib执行操作之前,是否必须对其进行laod操作?如何操作?令人困惑。无需将文件的所有者设置为AppDelegateBase。请将其设置为要使用的控制器(在本例中为UITabBarController)。在MainWindowIPad.xib和MainWindowIPhone.xib中,添加一个UITabBarController,将其连接到每个窗口中AppDelegate中的一个插座,并将其NIB名称字段设置为MasterController 到目前为止,您所做的是正确的。但是您还需要加载包含要显示的控制器的XIB 由于它是第一个加载的MasterController.xib,因此在MonoDevelop的项目设置中,在iPhone应用程序下,将其设置为应用程序的主界面文件。“主界面文件”和“iPad界面文件” 不要忘记将控制器的视图添加到窗口中。您可以通过代码实例化该视图,或者只需将其添加到XIB并将其连接到AppDelegateBase对象中的出口
如果要通过代码加载XIB,请考虑下面的代码段:
MasterController.xib是如何加载的?一点也不,我想这就是问题所在。我想我必须使用一些LoadNib()-但是如何加载?只是想澄清一下:名称可能有误导性。“MasterController”并不意味着它是主XIB。有MainWindowIPad.XIB和MainWindowIPhone.XIB。这些都是在Mono Develop中为主界面文件设置的。MasterController.XIB包含应该在两个设备之间共享的控制器。我尝试了LoadNib()但在AppDelegate.cs中执行时失败。我必须在哪里调用它?在您的示例中“this”是什么?但这不是我想要的。如果我必须在两个XIB(iPhone和iPad)中添加一个UITabBarController,为什么我会有第三个XIB和第三个UITabBarController?我想要的是:从单独的XIB中获取UITabBarController,然后(在代码中)将其添加为iPhone RootViewController或iPad拆分视图主控制器。因此,我希望在我的基本AppDelegate中有一个UITabBarController插座。该插座应从单独的XIB连接到控制器。您将在两个不同的XIB中添加视图控制器的事实并不意味着在runtim中有两个控制器e、 这就是为什么您必须将其NIB名称设置为包含实际控制器的XIB的名称。这些名称将仅用作指向选项卡栏控制器的链接。我理解这一点。但如果有一天我决定不再使用UITabBarController,而使用UINavigationController,我将不得不更改3个XIB(2个占位符,一个真实的东西)我不能相信我必须添加一个“虚拟”控制器。如果我不使用IB,我会用我的UITabBarController编写代码,我可以在iPad和iPhone上添加一个新的MyUITabBarController(),布局仍然可以用IB制作。你明白我的意思吗?
NSBundle.MainBundle.LoadNib ("MasterController", this, null);