objective-c - 如何以编程方式访问在 Interface Builder 中创建的 NSTableView?

标签 objective-c cocoa interface-builder nstableview

我是 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: 方法)。

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

最佳答案

您需要将表 Controller 类中的实例变量附加到界面生成器中的表。在你的类中声明一个表,如下所示:

IBOutlet NSTableView* myTable;

...

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

并且一定要合成它。

在界面生成器的信息窗口的连接选项卡中,将 Controller 的新 socket 连接到您的 table 。然后,当您的 View 从 XIB 加载时,此 socket 将被连接。

希望对一些人有帮助。

关于objective-c - 如何以编程方式访问在 Interface Builder 中创建的 NSTableView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4368659/

相关文章:

ios - 无法识别超出父 View 范围的 UILabel 上的点击

objective-c - 什么情况下[[NSScreen mainScreen]visibleFrame]会返回null?

macOS NSStackView 内容未填满可用空间

ios - 根据服务器的响应动态创建 UIButton

swift - XCode + Swift : Thread 1: EXC_BAD_ACCESS (code=2, 地址=0x7ffee99cdfd8)

iphone - 如何使用 Xcode 4.2 和 Storyboard使用 "Page Control"?

iphone - uiactionsheet 的背景颜色

ios - iOS 中的连续闪烁灯光动画

cocoa - 更新 NSOutlineView 项目

ios - UITextView 填充整个框架