如何将自定义视图添加到单点触摸的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加载的控制器的LoadView
。 LoadView
是为了在控制器的视图没有从XIB加载时创build控制器的视图。
感谢Dimitris,很好的回答。
对于那些像我这样感到困惑的人来说,这里是简单的程序来添加和使用Xib文件作为部分/子视图:
- 在MonoDevelop中添加一个新的Xib文件(即
LoginView.xib
) - 添加一个新的(部分)类,这将是视图的自定义类(代码隐藏文件)。 给它任何名字“
LoginView.cs
”) - Dimitris将上面的属性(
RegisterAttribte
)和Constrctor
为exaplain。- 双击
LoginView.xib
在XCode IB中打开它。 然后更改xib文件的Custom Class
属性指向您的“代码隐藏文件”(即LoginView.cs
)
- 双击
- 如果你需要添加任何网点或行动。 MonoDevelop将生成一个.designer文件并将其附加到代码隐藏文件中,这是您可以查看所有网点和操作的位置。
-
在要添加此视图的控制器中,按如下所示加载.xib文件:
var views = NSBundle.MainBundle.LoadNib(“LoginView”,this,null); LoginView loginView = Runtime.GetNSObject(views.ValueAt(0))作为LoginView; mainLayout.AddSubview(loginView); // mainLoyout是我的主ViewController中的placeHolder
这三行是基于flexaddicted的答案