【问题标题】:How to add a custom view to a XIB file defined view in monotouch如何在 monotouch 中将自定义视图添加到 XIB 文件定义的视图中
【发布时间】:2012-04-09 02:19:14
【问题描述】:

我目前正在尝试学习单点触控,并按照 Mike BlueStein 的《学习单点触控》一书进行学习。不错的书,但自从 xcode 4(我相信)和 monotouch 的更新版本以来,它有点过时了。

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

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

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

干杯。

【问题讨论】:

标签: c# ios mono xamarin.ios monodevelop


【解决方案1】:

感谢 Dimitris,很好的回答。

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

  1. 在 MonoDevelop 中添加一个新的 Xib 文件(即LoginView.xib
  2. 添加一个新的(部分)类,这将是视图的自定义类(假设是代码隐藏文件)。给它起任何名字“LoginView.cs”)
  3. 添加属性 (RegisterAttribte) 和 Constrctor 如上所述 迪米特里斯。
    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)) as LoginView; mainLayout.AddSubview(loginView); // 其中 mainLoyout 是我的主 ViewController 中的 placeHolder

这三行是​​基于 flexaddicted 答案here

【讨论】:

    【解决方案2】:

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

    首先,用RegisterAttribute装饰视图:

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

    并实现以下构造函数:

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

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

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

    • 编译-运行。

    编辑:

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

    【讨论】:

      猜你喜欢
      • 2013-04-07
      • 2014-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-08
      • 1970-01-01
      • 2011-09-13
      相关资源
      最近更新 更多