XCode / MonoMac中的自定义控件等效项

时间:2012-04-19 20:36:29

标签: .net xcode interface-builder monomac

我是.NET开发人员在Windows应用程序的OSX端口上尝试的。我使用MonoDevelop和MonoMac(使用XCode Interface Builder)来创建我的UI。

来自Windows,我试图理解C#等效的" UserControl"因为我在WinForm版本中广泛使用了这些。我有一组控件(让我们说一个标签,文本框和按钮),我想在整个Cocoa UI中打包并重复使用。

根据我的理解,我需要创建一个"自定义视图"通过继承NSView(让我们称之为" MyView")。我可以创建" MyView"在Interface Builder中,但是当我在主窗口上使用它时,它总是显示为空/空白。

以下是我如何将控件放在IB的主窗体上:我从对象库添加自定义视图(NSView),然后更改"类" " Custom Class"到" MyView"。如果控件在设计时没有呈现,那也不是问题,但它在运行时也是完全空的。

我怀疑我错过了一些非常简单/明显的东西。是否应该以这种方式使用自定义视图?我在网上找到的所有例子似乎都在讨论我不想要的自定义绘图(我只是想一起使用一堆控件,所以我可以重用它们)。谁能在那里为我揭示这一点?

提前致谢。

2 个答案:

答案 0 :(得分:3)

如果您只想要一组标准控件,那么您可能需要一个独立的视图NIB / XIB。然后,每次要实例化该组时,都要加载该NIB,从中获取顶级视图,并将该视图插入到其他视图层次结构中。您将使用NSViewController(或自定义子类)来拥有和加载该NIB。

您还可以为已经包含窗口的NIB添加独立视图。 NIB的所有者(通常是NSWindowController或子类的实例)将有一个出口来引用该独立的视图层次结构。然后,您的代码可以随意使用该视图层次结构,并将其插入窗口的视图层次结构中的适当位置。

您通常不会仅使用自定义视图类对标准控件进行分组。您只创建一个视图子类来创建一个非标准视图,一个以自定义方式绘制或提供不同操作技术的视图。

答案 1 :(得分:1)

这对我有用:

  1. 将“自定义视图”放到窗口上(不要在身份检查器中重命名类)。

  2. 在窗口控制器中为自定义视图设置一个名为“CustomView”的插座。

  3. 在窗口控制器awakeFromNib方法中添加以下代码

  4.     this.CustomView.AddSubview(new YourCustomViewController().View);
    

    注意:此问题的其他答案假设您的视图没有XIB,因此显示为空,因为它未正确加载。