2

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

来自 Windows,我试图理解“UserControl”的 Cocoa 等价物,因为我在我的 WinForm 版本中广泛使用了这些。我有一组控件(比如标签、文本框和按钮),我想打包并在整个 Cocoa UI 的各个地方重用它们。

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

下面是我如何在 IB 中的主窗体上放置控件:我从对象库中添加一个自定义视图 (NSView),然后将“自定义类”下的“类”属性更改为“MyView”。如果控件在设计时不呈现,这不是问题,但它在运行时也是完全空的。

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

提前致谢。

4

2 回答 2

3

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

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

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

于 2012-04-19T21:01:52.330 回答
1

这对我有用:

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

  2. 在名为“CustomView”的窗口控制器中为自定义视图创建一个出口。

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

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

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

于 2012-09-26T08:34:17.887 回答