2012-03-25 76 views
9

我想此刻学习MonoTouch的,并按照麦克BlueStein的学习MonoTouch的书。不是一本不好的书,但它自xcode 4(我相信)稍微过时了,并且Monoouch的更新版本已经出来。如何自定义视图添加到XIB文件中定义的视图中的MonoTouch

不管怎么说,在我的项目我有一个控制器和一个XIB文件。我也有一个自定义视图(例如myview:UIView),它覆盖了绘制方法。我想在xib文件中定义的视图的旁边或顶部显示自定义视图。我该怎么做呢?

在控制器中,如果我重写的loadView方法,并在视图设置为我的自定义视图的一个实例,那么我可以看到它,但我失去的厦门国际银行文件中定义的一切。如果我尝试添加为子视图,则完全不显示。

我错过了什么?如果问题不明确,请问我,所以我可以澄清。

干杯。

+0

这[SO问题](http://stackoverflow.com/questions/863321/iphone -how-load-a-view-using-a-nib-file-created-with-interface-builder)可能会帮助 – tipycalFlow 2012-03-25 06:30:17

回答

22

按照以下步骤来使用的厦门国际银行的自定义视图:

首先,装饰与RegisterAttribute的观点:

[Register("MyView")] 
public class MyView : UIView 
{ 
} 

,并实现以下构造:

public MyView(IntPtr handle) : base(handle) {} 

当运行时在内存警告被破坏后尝试重新创建视图时,需要此构造函数。 (总是通过双击它通过的MonoDevelop)

  • 打开XIB在Xcode,并添加你想要它UIView:在您创建自定义类。
  • 在Xcode中,设置的UIView的类MyView的(或任何名字,你传递给RegisterAttribute):

Custom class for custom view

  • 编译运行。

编辑:

不要为那些从厦门国际银行加载控制器覆盖LoadViewLoadView是为了在控制器的视图没有从XIB加载时创建控制器的视图。

+0

干杯。完美的答案。 – 2012-03-25 21:52:16

3

感谢Dimitris,很好的回答。

对于那些谁感到困惑和我一样,这里是simplist程序添加和使用XIB文件作为部分/子视图:

  1. 添加一个新的XIB文件中的MonoDevelop(即LoginView.xib
  2. 添加一个新的(部分)类,这将是视图的自定义类(让我们假设代码隐藏文件)。给它的任何名称“LoginView.cs”)
  3. 添加属性(RegisterAttribte)和Constrctor如exaplain以上通过 季米特里斯。
  4. 双击LoginView.xib XCode中IB将其打开。然后更改​​属性的厦门国际银行文件的指向你的“代码隐藏文件”(即LoginView.cs
  • 添加任何网点或行动,如果你需要的。 MonoDevelop将生成一个.designer文件并将其附加到代码隐藏文件中,这是您可以查看所有网点和操作的地方。
  • 在你的控制器,你要添加这个观点,如下加载您的.xib文件:

    VAR的看法= NSBundle.MainBundle.LoadNib( “LoginView”,对此,NULL); LoginView loginView = Runtime.GetNSObject(views.ValueAt(0))作为LoginView; mainLayout.AddSubview(loginView); //其中mainLoyout是我的主视图控制器的占位符

  • 这三行均基于flexaddicted答案here

    相关问题