我可以将表格编程为看起来像一张桌子吗

Posted

技术标签:

【中文标题】我可以将表格编程为看起来像一张桌子吗【英文标题】:Can I program a table to look like a table 【发布时间】:2010-01-21 04:11:43 【问题描述】:

我可以创建一个表格 (TableView) 并让它显示三列的值:- Col1,Col2,Col3 在这三列下有 N 个值吗?

Col1 Col2 Col3 价值1 价值1 价值1 价值 2 价值 2 价值 2 价值 3 价值 3 价值 3 .... ... ... .... ... ... .... ... ... 价值价值 价值价值

我现在看不到如何编写 MutableDictionary 和/或 MutableArray 来执行此类操作。

我是 Cocoa 编程和 Objective-c 的新手。我可以查看任何示例代码吗?

我将不胜感激。

【问题讨论】:

你指的是 NSTableView(在 Mac 上)还是 UITableView(在 iPhone 上)? 【参考方案1】:

Matt B. 的回答在技术上是正确的,但我想说,对于“cocoa 编程和 Objective-c 新手”的人来说,起初绑定可能太神奇了。 (哎呀,我做 Cocoa 的东西已经 2 年了,我才刚刚开始掌握它们的窍门)

我想说首先要了解的是the delegate pattern。这种模式在 Cocoa 框架中非常频繁地使用,并且要使用对象手动填充 NSTableView,您需要了解它。

基本思想是NSTableView 知道如何绘制,但不知道要绘制什么。所以我们要做的是给NSTableView一个“委托”对象,然后tableview询问委托它有多少行,每行有什么,等等。

delegate 对象本身是一个知道 tableview 应该做什么的对象,但不知道如何绘制它。它符合NSTableViewDataSource 协议(相当于Java“接口”)。这样,NSTableView 就有了一套标准的方法,可以用来查询委托并询问它需要的信息。

【讨论】:

谢谢。我正在阅读所有这些主题,但除非我有简单的代码和大量的解释,否则我很快就会迷失方向。我现在可以用objective-c 编程了。我对视图、控制器、委托、协议等主题完全迷失了方向。我的问题是理解它们的原因。为什么它们存在于框架中,以及它们究竟是如何做的。我来自 Delphi 背景,这种编程(表格、StringGrids、DataGrids 等)在 Delphi 中是不费吹灰之力的。【参考方案2】:

我现在看不到如何编写 MutableDictionary 和/或 MutableArray 来执行此类操作。

在这里,字典对你完全没用。

您需要将an object that models 设为您想在表格中列出的内容。每行对应于其中一个对象,您很可能会将其保存在一个数组中。这些列对应于模型对象的属性。

最常见的示例是人员列表(例如员工)。表格视图中的每一行都显示一个 Person 对象。每列显示该对象的一个​​属性:名字、姓氏、可能是公司名称、电话号码等。Bindings 和the table view data source protocol 都设计为以这种方式工作得最好(即最容易)。

您可能想传递模型对象的实现,而只是编写一个并行数组或其他东西。只要您使用数据源,您可以这样做,但不要落入这个陷阱——它会阻止您稍后切换到绑定,它会使属性暴露给 AppleScript(您不能让三个数组看起来像一个属性)是不可能的,而且它使得开发单个表格视图之外的 UI 更加困难

Cocoa 是围绕Model-View-Controller 设计的;通过提供模型来使用它,您会发现 Cocoa 中的一切都变得更加容易。

(不,字典不足以作为模型对象。它不会帮助您处理 AppleScript 或绑定,而且在您想让模型对象变得更智能时,它也会让您失望,而不仅仅是一盒简单的键值属性。派生属性、行为和自定义初始化器在字典上实现时充其量都是丑陋的黑客。)

【讨论】:

谢谢。我将在 cocoa 中查找 Model-View-Controller 实现。从表面上看,我还有好几天的阅读和理解时间。如果我卡住了,我希望可以拜访您和其他回答我问题的人。 如果您遇到困难,您应该针对您的具体问题提出另一个问题。 我一定会的。到目前为止,由于我正在研究这个东西,我做得很好。【参考方案3】:

您在此处使用的关键字是 bindings。 Cocoa Bindings 乍一看有点像巫术,但它实际上是将数组的内容暴露给表视图的方式。一旦你掌握了它,它绝对是了不起的。

在 Google 上搜索 NSTableView bindings tutorial 会显示大量页面。 This tutorial from CocoaDevCenter 真的很好(他们的大部分东西也是如此——绑定是一个高级主题,他们早期的一些指南也可能有用)。

Apple's docs 有点密集,但也可能有用。

【讨论】:

到目前为止,我已经阅读了教程一次。就像迄今为止的大多数可可教程一样,它们开始时我和它们在一起,然后突然之间,我彻底迷失了。我感谢你引导我做到这一点,但仍然如此。我可以向你保证,我会尽我最大的努力去理解这一切。 我现在正在学习本教程,并且开始更好地理解整个内容。绑定、控制器、视图等。我绝对是在正确的轨道上。谢谢马特。 太棒了!我确实花了相当长的时间来处理绑定。关于它们最困难的部分是,如果您错误地接线,它们真的很难排除故障。在我真正开始有信心创建自己的设计之前,我必须遵循一堆不同的教程。祝你好运!

以上是关于我可以将表格编程为看起来像一张桌子吗的主要内容,如果未能解决你的问题,请参考以下文章

如何将欢迎屏幕插入基于导航的 Iphone 应用程序?

导致问题的纹理

如果我在 sql server 中为表创建索引,看起来索引表的视图会受到影响吗?

打印预览隐藏表格边框

一张桌子有两个外键吗?

宏 - 如果值满足条件复制粘贴到另一张纸