【问题标题】:Custom Control equivalent in XCode/MonoMacXCode/MonoMac 中的自定义控件等效项
【发布时间】:2012-04-19 20:36:29
【问题描述】:

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

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

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

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

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

提前致谢。

【问题讨论】:

    标签: .net xcode interface-builder monomac


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢,这很有帮助(抱歉回复慢……我被跟踪了)​​。我仍在努力将控件插入到我想要的视图层次结构中,但我有一个好的开始。
    【解决方案2】:

    这对我有用:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-09
      相关资源
      最近更新 更多