如何在AppDelegate.cs中使用带有插座的单独XIB的UIViewController?出口始终为NULL

时间:2011-08-28 20:43:45

标签: xamarin.ios

这里很奇怪。我想我以前做过但它似乎不再起作用了。 环境现在是:Lion,MT 4.1,MD 2.6 RC,Xcode 3的Interface Builder。

  • 我有一个通用应用程序(来自MonoDevelop的模板)。
  • 我将其更改为有一个AppDelegateBase课程,其中iPhone和iPad的应用代表都继承自。
  • 有一个MasterController.xib文件包含UITabBarController
  • 在IB中,我将此XIB的文件所有者设置为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?怎么样?困惑。

1 个答案:

答案 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);