【问题标题】:How to programmatically access an NSTableView that was created in Interface Builder?如何以编程方式访问在 Interface Builder 中创建的 NSTableView?
【发布时间】:2010-12-06 16:32:59
【问题描述】:

我是 Objective-C 和 Cocoa 编程的新手(来自多年前在其他平台上的 C/C++ 开发背景)。我正在编写一个应用程序以重复下载远程数据(即每 X 秒),解析它,将其排序/过滤到 NSArray,并在 NSTableView 中显示/更新所述数据。在阅读了几本书、大量 Apple OS X 参考资料并进行了实验之后,我设法实现了一切(远程数据下载、解析/过滤逻辑、内存存储等),除了用数据实际更新 NSTableView .

我不确定我是否只是遗漏了一些明显的东西,或者我的应用程序应该如何按照 MVC 概念布局,或者 Interface Builder 缺乏实际代码生成只是我不习惯的,但我似乎无法确定如何以编程方式访问/操作在 Interface Builder 中创建的 NSTableView。

我尝试(在 Interface Builder 中)将我的基于 NSArray 的对象的 NSObject 实例拖入其中,然后我可以连接我的 NSTableView 的 Outlet/数据源,但这会导致我的基于 NSArray 的对象的另一个实例(未连接NSTableView 到我现有的、以编程方式声明和实例化的对象)。同样,我想以编程方式设置我的 NSTableView 的数据源,但我无法确定如何以编程方式引用存储在 .xib/.nib 文件中的 NSTableView 对象,而不是通过标签(对此我无法在 Interface Builder 中设置我的 NSTableView 的 Tag 值后,确定从哪个对象调用 viewWithTag: 方法)。

我们将不胜感激任何建议、意见或指导。这感觉像是其中一件非常简单的事情(一旦我把它放在我面前,它就会变得更有意义),但我似乎无法找到一个起点/示例工作。

【问题讨论】:

  • 你的班级头文件中有IBOutlet NSTableView吗?
  • 我建议您购买一本 iPhone 初学者开发书籍,因为它涵盖了这些项目中的典型过程 - 创建标题、分配 IBOutlets、运行 IB、将 GUI 附加到 IBOutlets 等。跨度>
  • ...或至少阅读 Apple 免费提供的介绍性文档,直接从 developer.apple.com 页面链接...
  • 我完成了多个使用 Interface Builder 的示例,但所有示例都围绕从一个控件触发更新到其他控件的操作(其中数据始终存储在 Interface Builder 中所有设置的对象中)。在我的例子中,我已经在一个以编程方式实例化的对象中有数据(没有任何用户输入)。我可以通过 NSLog 等将其显示出来,但我不明白如何将其“连接”到 GUI 以显示它。我知道这一定很简单,我只是没有抓住或抓住。感谢大家花时间回答。

标签: objective-c cocoa interface-builder nstableview


【解决方案1】:

您需要将表格控制器类中的实例变量附加到界面生成器中的表格。像这样在你的类中声明一个表:

IBOutlet NSTableView* myTable;

...

@property (nonatomic, retain) IBOutlet NSTableView* myTable;

并且一定要合成它。

在界面构建器信息窗口的连接选项卡中,将控制器的新插座连接到您的桌子。然后,当您的视图从 XIB 加载时,此插座将被连接。

希望对一些人有所帮助。

【讨论】:

  • 好的,所以我更新了我的课程以包含IBOutlet NSTableView* myTable;,并合成它。在 Interface Builder 中,我拖过一个对象并将它的类标识设置为我的类。然后,我从对象的 myTable Outlet -> NSTableView?我认为这给我留下了同样的问题...... NSTableView 现在已连接,但它连接到从 .xib/.nib 实例化的对象(不是我的包含我希望的数据的编程实例化对象显示在 NSTableView 中),不是吗?
  • 如果您使用单独的 XIB,则应将“文件的所有者”对象设置为您的类,并将插座连接在那里。如果您在一个 XIB 中使用所有东西,那么请确保您在已经可以访问的东西中有一个插座,并根据需要创建一个插座层次结构。在第二种情况下,您的顶层可能会在您的应用委托中。
猜你喜欢
  • 2010-10-14
  • 1970-01-01
  • 2018-01-29
  • 2023-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多