问题标签 [nscollectionview]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
4161 浏览

objective-c - 如何从 NSCollectionViewItem 中的视图中获取代表对象?

我有一个在我的每个 CollectionView 项目中使用的视图。从我的角度来看,我有一个到 CollectionViewItem 的 IBOutlet,我已经在 Interface Builder 中连接了它。我想在我的视图代码中从代表对象(它是一个核心数据对象)访问一个值。这是我正在尝试做的一个示例 - 访问代表对象的序列值:

在 .h 文件中:

在 .m 文件中

我知道 seq 已填充,因为我使用代表对象.seq 键路径将它绑定到 IB 的 CollectionViewItem 视图中的标签,并且有效。

知道为什么当我尝试访问视图代码中 seq 的值时它返回 null 吗?

0 投票
3 回答
3996 浏览

objective-c - 如何在我的 NSCollectionView 的视图子类中以编程方式绑定?

我已经成功地创建了一个 NSCollectionView 并向 IB 中的视图原型添加了一个标签,该标签绑定到我表示的对象的一个​​属性。我现在想以编程方式创建一个 NSButton 和 NSTextField,其中 NSTextField 绑定到我表示的对象的属性。单击按钮时,我想显示和隐藏 NSTextField。

我遇到的问题是,如果我将控件的初始化代码放在视图的 initWithCoder 方法中,并且绑定在视图的 awakeFromNib 中,则绑定不会被连接起来。如果我将控件的初始化放在 awakeFromNib 中,当单击按钮时,我无法访问视图中的控件(使用 NSLog 打印时它们为空)。

据我所知,问题可能在于 NSCollectionView 的工作方式是,它创建视图的一个实例,然后复制它以获取集合视图中每个对象的数量。如何获得要初始化的按钮以及与原型副本一起使用的绑定?

下面是我的初始化代码和我在子类视图的 awakeFromNib 中的绑定:

子视图.h

子视图.m

0 投票
1 回答
2576 浏览

objective-c - 如何正确使用 NSCollectionView 和 Outlets?

我正在拼命尝试使用插座连接将驻留在 NSCollectionView 中的 NSView 控件。集合视图使用 NSArrayController 提供。

我在一个单独的 NIB 文件中创建了 NSView,在 NSCollectionViewItem 的实现中我重写了 copyWithZone 来加载它:

我已经根据这个说明使用了这种方法。

不幸的是,这就是发生的事情:

替代文字

NSView 看起来像这样:

替代文字

NSCollectionView 驻留在 NSScrollView 中,并且滚动条设置为自动启用。但正如您所见,没有滚动条。

我真的不明白我需要做什么,所以 NSCollectionView 知道它的 NSView 的尺寸。

当我没有单独的 NIB 文件时,它以前工作过,但后来我无法从视图到项目建立插座连接:-(

0 投票
1 回答
2160 浏览

objective-c - NSCollectionView 不更新数据更改的子视图

我已经通过 Interface Builder设置了一个NSCollectionView 。我的原型视图包含一个进度指示器和一个文本字段。我已经设置了绑定,以便我的“任务”对象保持进度指示器的值和文本字段的值。

当我将新对象添加到集合(通过[NSCollectionView newItemForRepresentedObject:]它添加到我的数组控制器)时,一切正常。进度指示器和文本字段的初始值得到适当设置。但是,当值发生变化时,它不会反映在原型视图中。这些值始终保持其初始值。

我尝试在“任务”对象中添加指向原型视图的指针,并尝试通过强制更新[NSView setNeedsDisplay:TRUE]但无济于事。我已经对原型视图进行了子类化,并为它提供了进度指示器的出口,以便我可以检查它以在运行时查看它的值,奇怪的是,即使视图创建成功,进度指示器也没有!与它实际上显示并保持初始值的事实完全矛盾!

有什么方法可以使用当前设置将更改传播到视图?

提前致谢。

0 投票
1 回答
231 浏览

objective-c - 我可以通过 Interface Builder 在 NSCollection 视图中连接一个动作吗?

我有一个 NSCollection 视图。我想将复制视图中的控件连接到我的控制器的出口,传入代表对象,或者连接到代表对象本身的出口。我可以用 IB 做到这一点,还是需要以编程方式做到这一点?

0 投票
5 回答
1068 浏览

cocoa - 如何在 Cocoa 中实现自定义列表?

我想构建一个 Cocoa 应用程序,其条目列表与 Things.app 的 ToDo 列表非常相似(请参阅截屏视频)。问题是我是否应该使用

  1. 一个表视图,
  2. 一个 CollectionView 或
  3. 一个网页视图。

我认为它可以适用于所有这些,但哪一个最适合以下要求?

  • 有一个条目列表-> 1 列和多行
  • 通过拖放重新排序
  • 选择单个条目并使用键进行删除等操作
  • 打开一个条目:该行应展开以显示更多输入字段
  • 定制外观:圆角、阴影、背景渐变

到目前为止,我的研究表明 TableView 具有大部分功能,但在外观上更难自定义,CollectionView 没有拖放(对吗?)但易于设计,WebView 需要付出很多努力才能做到伤害了用户体验,我无法将模型直接绑定到输入字段。

我缺少什么优点和缺点,你会推荐使用什么?

0 投票
1 回答
634 浏览

cocoa - 在 NSCollectionViewItem 实例中更新 NSTableView

在我的设置中,我有一个连接到 mac 的卷的 NSCollectionView。对于 NSCollectionViewItem 的视图,我有一个 NSBox,里面有一个 NSTableView,列出了该卷的内容。

我的问题是在尝试向 NSTableView 添加/删除项目时出现的。NSBox 好像初始化过一次,所以只有一个 NSTableView。这意味着当我想更新 NSTableView 中的数据时,我无法在 IBOutlet 上调用 reloadData 并让它更新所有表。

如果我在 NSBox 的子类中创建一个 IBOutlet,则该实例为 nil,因此我无法通过它调用它。

我最接近的方法是在代码周围加上一个@try @catch,该代码在列中的一行返回对象,由于该项目不再存在而发生异常,因此我可以获取tableView并调用reloadData,这似乎更新特定的 NSTableView。

这样做的问题是,如果删除的项目位于表格的末尾,或者如果添加了一个项目,则不会发生异常,因为它可以看到所有现有项目。

有没有人在 NSCollectionViewItem 的视图上使用 NSTableView 的经验?你是如何更新表格的?

0 投票
2 回答
2947 浏览

objective-c - 10.6/Xcode 3.2 中的 NSCollectionView

NSCollectionViewItem在 Xcode 3.1.2 中,我曾经在我的子类中加载 nib,NSCollectionViewItem如下所示:

在 10.6 下的 Xcode 3.2 中,相同的方法不会产生错误,但也不会在NSCollectionView其中加载视图。

是否需要做其他事情才能使视图显示出来?或者有没有更好的方法来改变NSCollectionItem's superclass to NSViewController

毕竟,重写copyWithZone来实现这个标准功能对我来说似乎总是一种 hack。我认为应该能够指定应该在 IB 中使用的 nib,但 Apple 似乎不这么认为。

我确实查看了文档中提供的示例,但是NSCollectionViewItem使用 以编程方式对其进行了实例化initWithNibName,但我想在 IB 中创建它。

更新

我按照 kperryua 的建议做了,但现在我无法从NSCollectionViewItem. 这是我正在尝试做的事情:

我将标签名称绑定到文件所有者,即我的NSCollectionViewItem. 这曾经在 10.5 中完美运行,但现在未分配插座(我使用 GDB 进行了检查)。

图片显示绑定 http://img21.imageshack.us/img21/671/picya.png

更新 2

我还将NSCollectionView's绑定itemPrototype到我的NSCollectionViewItem(PersonController) 子类。

图片显示绑定 http://img503.imageshack.us/img503/4672/pic2d.png

现在File's OwnerthePersonView.nibitemPrototypeof 都NSCollectionView指向我的子类。

显示控制台输出的图像 http://img340.imageshack.us/img340/6184/pic3.png

正如您在屏幕截图中看到的那样,项目已显示,但标签的文本无法更改,因为labelName无法访问插座。

我还记录了我尝试设置的名称,以确保它不是“名称”。

需要做什么来更改标签的值?

任何帮助,将不胜感激。

0 投票
2 回答
2411 浏览

objective-c - NSCollectionViewItem 双击动作?

当用户双击一个NSCollectionViewItem. NSTableView,例如,有setDoubleAction方法。有类似的东西NSCollectionView吗?

谢谢

0 投票
1 回答
2094 浏览

objective-c - NSCollectionView 什么也没画

我正在尝试设置一个NSCollectionView(我过去已经成功地做到了这一点,但由于某种原因这次失败了)。

我有一个名为“TestModel”的模型类,它有一个NSString只返回一个字符串的属性(现在仅用于测试目的)。然后我在我的主应用程序委托类中有一个NSMutableArray属性声明,并向这个数组添加TestModel对象的实例。

然后我有一个数组控制器,它的内容数组绑定了应用程序委托的NSMutableArray. 我可以确认到目前为止一切正常;NSLogging:

工作正常。

然后,我为集合视图设置(itemPrototype 和内容)以及集合视图项(视图)设置了所有适当的绑定。然后,我在绑定到 Collection View 的集合项视图中有一个文本字段Item.representedObject.teststring。但是,当我启动应用程序时,集合视图中没有显示任何内容,只是一个空白的白色屏幕。我错过了什么?

更新:这是我使用的代码(由 wil Shipley 要求):

然后就像我说的,Array Controller 的 content 数组绑定到这个“objectArray”,NSCollectionView 的 Content 绑定到 Array Controller.arrangedObjects。我可以通过 NSLogging [arrayController mappedObjects] 验证 Array Controller 中是否包含对象,并且它返回正确的对象。只是在 NSCollectionView 中没有显示任何内容。

更新 2:如果我记录 [collectionView 内容],我什么也得不到:

问题可能就在那里。

更新 3:这里要求的是 Xcode 项目:

http://www.mediafire.com/?mjgdzgjjfzw

它是一个菜单栏应用程序,所以它没有窗口。当您构建并运行应用程序时,您会看到一个显示“测试”的菜单栏项,这将打开包含 NSCollectionView 的视图。

谢谢