2013-03-26 141 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的看法。这种方法似乎。

澄清由于后台工作线程竞态条件引起的问题。