我正在努力学习monotouch,并遵循Mike BlueStein的学习单音书。这本书并不算坏,但是自从xcode 4(我相信)以及monotouch的新版本问世以来它已经过时了。
无论如何,在我的项目中我有一个控制器和一个xib文件。我还有一个自定义视图(例如myview:UIView),它会覆盖draw方法。我想在xib文件中定义的视图旁边或顶部显示我的自定义视图。我该怎么做?
在控制器中,如果我覆盖LoadView方法,并将View设置为我的自定义视图的实例,那么我可以看到它,但是我放弃了xib文件中定义的所有内容。如果我尝试添加为子视图,它根本不会出现。
我错过了什么?如果问题不明确,请问我,所以我可以澄清。
干杯。
答案 0 :(得分:22)
按照以下步骤在XIB中使用自定义视图:
首先,使用RegisterAttribute
:
[Register("MyView")]
public class MyView : UIView
{
}
并实现以下构造函数:
public MyView(IntPtr handle) : base(handle) {}
当运行时在内存警告销毁后尝试重新创建视图时,需要此构造函数。创建自定义类后:
UIView
。RegisterAttribute
的任何名称):
修改强>
不要覆盖从XIB加载的控制器的LoadView
。 LoadView
用于在未从XIB加载控制器视图时创建控制器视图。
答案 1 :(得分:3)
感谢迪米特里斯,很棒的回答。
对于那些像我一样困惑的人,这里是添加和使用Xib文件作为部分/子视图的简单程序:
LoginView.xib
)LoginView.cs
”)RegisterAttribte
)和Constrctor
作为上面的exaplain
季米特里斯。
LoginView.xib
以在XCode IB中打开它。然后更改xib文件的Custom Class
属性以指向“代码隐藏文件”(即LoginView.cs
)在要添加此视图的控制器中,按如下方式加载.xib文件:
var views = NSBundle.MainBundle.LoadNib(“LoginView”,this,null); LoginView loginView = Runtime.GetNSObject(views.ValueAt(0))作为LoginView; mainLayout.AddSubview(loginView); //其中mainLoyout是我的主ViewController中的placeHolder
这三行基于flexaddicted answer here