2013-03-26 182 views
0

我希望有人可以幫助解決這個問題,我有xib文件使用monotouch。Monotouch自定義UIView

我想創建一個從uiview派生的子視圖。在IB中,我創建一個類,將其類型設置爲我的自定義類的類型,然後將所有IBOutlet鏈接到自定義類(這是我認爲錯誤可能存在的地方,因爲我懷疑這應該是文件所有者)。

甲IB h文件例如是

@interface ActivityUtilityView : UIView { 
UILabel *_ActivityLabel; 
UILabel *_CaptionLabel; 
} 

@properrty (nonatomic, retain) IBOutlet UILabel * ActivityLabel; 
@properrty (nonatomic, retain) IBOutlet UILabel * CaptionLabel; 

@End 

在應用程序代碼的視圖需要在運行時使用被加載。

var intptr = NSBundle.MainBundle.LoadNib("ActivityUtilityView",parent_controller,null).ValueAt(0); 
m_ActivityView = new ActivityView(intptr); 

第一個問題是沒有一個IBOutlet被實例化。

第二個問題是該視圖正在創建兩次,從我可以告訴。

請任何人都可以幫忙嗎?

編輯

我發現,一半的問題是,插座不實例化,直到顯示視圖。

那麼我該如何強制顯示一個子視圖?

回答

0

我發現了一個可行的解決方案。

m_ActivityView = Activator.CreateInstance<ActivityUtilityView>(); 
var view = NSBundle.MainBundle.LoadNib("ActivityUtilityView",m_ActivityView,null); 
m_ProgressView = Runtime.GetNSObject(views.ValueAt(0) as ActivityUtilityView; 

創建使用IntPtr的構造函數,直到認爲已經顯示不實例化IBOutlets的看法。這種方法似乎。

澄清由於後臺工作線程競態條件引起的問題。