2011-08-28 29 views
0

這裏有奇怪的事情。我認爲我以前做過,但它似乎不再有效。 環境現在是:Lion,MT 4.1,MD 2.6 RC,Xcode 3的Interface Builder。如何在AppDelegate.cs中使用帶有插座的獨立XIB的UIViewController?奧特萊斯始終爲空

  • 我有一個通用的應用程序(從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」) 公共部分類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

如何MasterController.xib裝? –

+0

一點都不,這就是我所假設的問題。我想我將不得不使用一些LoadNib() - 但是如何? – Krumelur

回答

0

沒有必要將文件所有者設置爲AppDelegateBase。將其設置爲您要使用的控制器(在本例中爲UITabBarController)。在MainWindowIPad.xib和MainWindowIPhone.xib中,添加一個UITabBarController,將它連接到每個AppDelegate中的插座,並將其NIB名稱字段設置爲MasterController。

到目前爲止你所做的是正確的。但是,您還需要加載包含要顯示的控制器的XIB。

由於它是MasterController.xib第一個將被加載的應用程序的主界面文件,它被設置在MonoDevelop的iPhone應用程序下的項目設置中。 「主界面文件」和「iPad界面文件」。

不要忘記將控制器視圖添加到窗口。您可以通過代碼實例化,或者將其添加到XIB並將其連接到AppDelegateBase對象中的插座。

如果你想通過代碼加載廈門國際銀行,考慮下面的代碼片段:

NSBundle.MainBundle.LoadNib ("MasterController", this, null); 
+0

只是爲了澄清:該名稱可能是誤導性的。 「MasterController」並不意味着它是主要的XIB。有MainWindowIPad.xib和MainWindowIPhone.xib。這些也在Mono Develop中爲主界面文件設置。 MasterController.xib包含應該在兩個設備上共享的控制器。我嘗試了LoadNib(),但在AppDelegate.cs中執行時失敗。我必須在哪裏打電話?在你的例子中,這是什麼? – Krumelur

+0

更改了我的答案。 –

+0

但這不是我想要的。如果我必須添加兩個XIB(iPhone和iPad)的UITabBarController,爲什麼我會有第三個XIB和第三個UITabBarController?我想要的只是:從單獨的XIB獲取UITabBarController,然後(在代碼中)將其添加爲iPhone RootViewController或iPad分割視圖主控制器。因此我想在我的AppDelegate基礎中使用UITabBarController插座。該插座應該從單獨的XIB連接到控制器。 – Krumelur