从代码中显示两个项目 NSTableView 的最简单方法?

Posted

技术标签:

【中文标题】从代码中显示两个项目 NSTableView 的最简单方法?【英文标题】:Simplest possible way to show two items NSTableView from code? 【发布时间】:2011-12-06 18:12:14 【问题描述】:

如何在 XCode 4.2.1 中创建代码,什么会创建 NSTableView 并向其中添加几个项目?

我想做的只是: 1) NSTableView 所在的窗口 2)我在 NSArray 中有一个字符串数组,我想在那个 NSTableView 中显示 3)所有这些都应该在代码中完成。所以我不想学习如何在你按下按钮时添加这个动作(我已经知道如何在用户单击按钮等时执行动作),我只想启动应用程序 - >从我的这些项目中绘制表格大批。仅此而已,仅此而已。

是的,我知道我不会直接向 NSTableView 添加项目。这不是这个问题的重点。我的意思是我想在该表中显示几个项目,但我不知道应该在哪里添加我的数组中的数据。

我已经尝试在谷歌上搜索几个小时的示例页面(太多了并且没有找到帮助),但是当我遇到 a)我必须在 Interface Builder 中做一些事情,并且 interface builder 的图像来自版本 2.x 或 3.x,而我有 4.2.1,它完全不同(XCode 的新手......)。当然,我已经将我的 TableView 元素绘制到 UI 上,但我的意思是委托等。这些有必要吗?可以用源代码制作吗? b) 代码不再起作用,因为语言(Cocoa 或 Objective-C,我不知道)发生了变化,我不知道如何以及如何使其在最新版本的 XCode 上工作。 c)有太多不同的方式告诉:“使用绑定”,“你必须创建新类什么是 NSTableViewDataSource”等。我不知道什么是首选方式,另一种方式是可选的,或者它是“你应该使用这是因为另一个即将被弃用”或其他东西。

那么请,有人可以一步一步地提供帮助吗?我应该创建一些绑定吗?如果是这样,如何以及在哪里?我必须自己创建 DataSource 组件吗?这些方法是否有效?如果必须,我该如何创建它?创建一个新类并将其实现为 NSTableViewDataSource 然后使用它?这种方式是否有效,如果有效,有人可以显示尽可能简单的代码吗?

我还多次检查 Apple 文档页面,检查了那些示例代码,但有太多完全不相关的东西我现在不明白,所以它们完全没用(我的意思是,我不知道这项任务需要什么,不需要什么等。

如果有人可以帮助简短的教程一步一步地做什么,我会很高兴。我的意思是“逐步”,例如: 1) 创建新项目 2)在项目中绘制NSTableView 3)用这个名字创建新类 4) 写下这段代码:blah blah blah 5)用这个名字创建另一个类 6) 编写此代码 7) 使用 (bindings/datasource/whatever is preferred) 运行并查看 NSTableView 中数组中的那些项目。

谢谢:)

【问题讨论】:

【参考方案1】:

您的 tableview 需要一个数据源。您的数据源是一个自定义类,它实现了“NSTableViewDataSource”协议。该协议包含一些方法,您可以使用这些方法告诉 tableview 您获得了哪些数据。

这包括 objectValue(在指定行上显示数据的 NSCell 的值,以及返回 tableview 具有的行数(数组中的项目数)的方法。

这是我通过谷歌搜索找到的教程: CocoaDev.com NSTableView tutorial

您还可以实现 NSTableViewDelegate 协议,该协议允许更大的控制。比如你可以选择哪些行,或者自定义表格视图单元格的一些额外配置。

我必须说,当我开始开发桌面应用程序(只有网络技术经验)时,这种设计模式也让我感到困惑。希望您能尽快解决问题。

【讨论】:

谢谢,但我已经检查过该页面,但我不明白。一开始我没有理解这部分:“在将表格视图添加到 nib 文件时,您需要做一些额外的工作:您需要将控制器对象连接为表格视图的数据源。您可以通过 control-从你的表视图拖到你的控制器对象。一旦建立这个连接,表视图将向你的控制器询问新数据,当数据更改时通知你的控制器,等等。“ 是的,这就是我在回答中所说的对象。 [tableViewOutlet setDatasource:self];在您的控制器类中也可以使用。 当我使用 Ctrl + 拖动我的 tableView 项目到源代码并将其创建为插座时,然后呢?您能否逐步说明我可以在那里看到一些项目的操作,我仍然对此感到非常困惑......(来自php;) 我做了一个小视频。它将在大约 30 分钟内转换为可用的格式。请耐心等待 非常感谢!我正在尝试,但是视频的包装使某些部分无法阅读:/例如在 1:26 我看不到那里读到的内容,该视频中的字体太模糊了?是因为vimeo吗?我尝试使用 Safari 和 Chrome(有和没有 Flash,例如 html5 视频和 Flash 版本)检查它,但无法读取它(在全屏模式下以 13" 英寸显示):/

以上是关于从代码中显示两个项目 NSTableView 的最简单方法?的主要内容,如果未能解决你的问题,请参考以下文章

在 NSTableView 中显示图像

在 nstableview 中显示目录中的数据

在 NSTableView 中显示来自 NSArray 的数据

拖出 NSTableView 以移除

当项目更改时,CoreData 绑定的 NSTableView 会失去输入焦点,但前提是已排序

使用核心数据存储对 NSTableView 的拖放支持