这里很奇怪。我想我以前做过但它似乎不再起作用了。 环境现在是:Lion,MT 4.1,MD 2.6 RC,Xcode 3的Interface Builder。
AppDelegateBase
课程,其中iPhone和iPad的应用代表都继承自。UITabBarController
。AppDelegateBase
。UITabBarController
插座并将其连接到相应的控制器。在MasterController.xib.designer.cs中我可以看到连接在那里。这就是MasterController.xib.designer.cs的样子:
//基类型可能应该是MonoTouch.UIKit.UIViewController或子类 [MonoTouch.Foundation.Register( “AppDelegateBase”)] public partial class 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);
}
}
}
但在我的AppDelegatebase.cs中,this.oTabBarController
始终为NULL 。这有什么不对?
与早期项目的唯一区别在于,我有一个额外的XIB,其中包含我将在iPhone和iPad中使用的控制器,因此不希望在iPhone和iPad的XIB中复制。
在我可以做之前,我是否需要使用MasterController.xib?怎么样?困惑。
答案 0 :(得分:0)
无需将文件所有者设置为AppDelegateBase。将其设置为您要使用的控制器(在本例中为UITabBarController)。在MainWindowIPad.xib和MainWindowIPhone.xib中,添加一个UITabBarController,将它连接到AppDelegate中的每个插座,并将其NIB Name字段设置为MasterController。
到目前为止你所做的是正确的。但是您还需要加载包含要显示的控制器的XIB。
由于MasterController.xib是第一个要加载的,因此在iPhone应用程序的MonoDevelop项目设置中将其设置为应用程序的主界面文件。 “主界面文件”和“iPad界面文件”。
不要忘记将控制器的视图添加到窗口中。您可以通过代码实例化它,或者只是将其添加到XIB并将其连接到AppDelegateBase对象中的插座。
如果要通过代码加载XIB,请考虑以下代码段:
NSBundle.MainBundle.LoadNib ("MasterController", this, null);