如何将自定义视图添加到单点触摸的XIB文件定义视图中

我正在尝试学习单点触摸,并遵循Mike BlueStein的学习单点触摸书。 不是一本坏书,但它自从xcode 4(我相信)稍微过时了,并且Monoouch的更新版本已经出来。

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

在控制器中,如果我重写LoadView方法,并将视图设置为我的自定义视图的一个实例,那么我可以看到它,但是我没有定义在xib文件中的所有东西。 如果我尝试添加作为子视图,它不会出现。

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

干杯。

按照以下步骤在XIB中使用自定义视图:

首先,用RegisterAttribute装饰视图:

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

并实现以下构造函数:

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

这个构造函数在运行时会在内存警告被破坏后尝试重新创build视图时需要。 在创build自定义类之后:

  • 在Xcode中打开XIB(总是通过双击MonoDevelop),并添加一个UIView到你想要的地方。
  • 在Xcode中,将UIView的类设置为MyView(或传递给RegisterAttribute名称):

自定义视图的自定义类

  • 编译运行。

编辑:

不要覆盖从XIB加载的控制器的LoadViewLoadView是为了在控制器的视图没有从XIB加载时创build控制器的视图。

感谢Dimitris,很好的回答。

对于那些像我这样感到困惑的人来说,这里是简单的程序来添加和使用Xib文件作为部分/子视图:

  1. 在MonoDevelop中添加一个新的Xib文件(即LoginView.xib
  2. 添加一个新的(部分)类,这将是视图的自定义类(代码隐藏文件)。 给它任何名字“ LoginView.cs ”)
  3. Dimitris将上面的属性( RegisterAttribte )和Constrctor为exaplain。
    1. 双击LoginView.xib在XCode IB中打开它。 然后更改xib文件的Custom Class属性指向您的“代码隐藏文件”(即LoginView.cs
  4. 如果你需要添加任何网点或行动。 MonoDevelop将生成一个.designer文件并将其附加到代码隐藏文件中,这是您可以查看所有网点和操作的位置。
  5. 在要添加此视图的控制器中,按如下所示加载.xib文件:

    var views = NSBundle.MainBundle.LoadNib(“LoginView”,this,null); LoginView loginView = Runtime.GetNSObject(views.ValueAt(0))作为LoginView; mainLayout.AddSubview(loginView); // mainLoyout是我的主ViewController中的placeHolder

这三行是基于flexaddicted的答案