如何在monotouch中将自定义视图添加到XIB文件定义视图

时间:2012-03-25 02:53:24

标签: c# ios mono xamarin.ios monodevelop

我正在努力学习monotouch,并遵循Mike BlueStein的学习单音书。这本书并不算坏,但是自从xcode 4(我相信)以及monotouch的新版本问世以来它已经过时了。

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

在控制器中,如果我覆盖LoadView方法,并将View设置为我的自定义视图的实例,那么我可以看到它,但是我放弃了xib文件中定义的所有内容。如果我尝试添加为子视图,它根本不会出现。

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

干杯。

2 个答案:

答案 0 :(得分:22)

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

首先,使用RegisterAttribute

装饰视图
[Register("MyView")]
public class MyView : UIView
{
}

并实现以下构造函数:

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

当运行时在内存警告销毁后尝试重新创建视图时,需要此构造函数。创建自定义类后:

  • 在Xcode中打开XIB(始终通过MonoDevelop双击它)并在您想要的地方添加UIView
  • 在Xcode中,将UIView的类设置为MyView(或传递给RegisterAttribute的任何名称):

Custom class for custom view

  • 编译 - 运行。

修改

不要覆盖从XIB加载的控制器的LoadViewLoadView用于在未从XIB加载控制器视图时创建控制器视图。

答案 1 :(得分:3)

感谢迪米特里斯,很棒的回答。

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

  1. 在MonoDevelop中添加新的Xib文件(即LoginView.xib
  2. 添加一个新的(部分)类,这将是视图的自定义类(代码隐藏文件)。给它起任何名字“LoginView.cs”)
  3. 添加属性(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

  6. 这三行基于flexaddicted answer here