问题标签 [nscollectionviewitem]

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 投票
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 的视图。

谢谢

0 投票
1 回答
1295 浏览

objective-c - 调整 NSCollectionViewItem 的视图大小

如何以编程方式设置 NSCollectionViewItem 的视图大小?

我尝试在 NSCollectionView 子类中这样做:

但是,此代码无效。我尝试将我用于 NSCollectionViewItem 的 NSView 子类化,并将 setFrame: 添加到 initWithCoder 方法,但是当我这样做时,我遇到了 EXC BAD ACCESS 崩溃。

0 投票
1 回答
973 浏览

objective-c - 在 Scroll 上重绘 NSCollectionView 会导致图形中断

当我滚动窗口时,我有一个轻微的刺激,NSCollectionView其中NSCollectionViewItem's 在视觉上会破裂。

分解的速度取决于滚动的速度。例如,如果我慢慢滚动,分手会更频繁地发生。快速滚动较少。看来问题出在NSCollectionViewItem我正在使用的自定义 NSView 越过可视框架的边界时。

我的 NSView(自定义视图NSCollectionViewItem)有一个非常简单的绘图算法 - 没什么太复杂的。

本质上,我在 drawRect 方法的 dirtyRect 中创建了一个框架,并在其中创建了一些框架:

我已经尝试在代码之前和之后锁定焦点并释放,以及设置图形上下文并恢复它——这些似乎都不能解决问题。

我正在使用 Snow Leopard - 我认为这并不重要。

解决方案更新

对于任何对此感兴趣的人,都是 NSResponder 推荐的问题的解决方案。mOuterFrame我是根据所指出的drawRect:方法创建初始值,这是不正确的做法。dirtyRect快速变化:

到基于 0 的起始点:

我还调整了代码的效率,因为我只使用矩形,正如建议的那样,尽管上面的代码更改足以解决问题本身。我必须添加一个更改以获得两像素线。新方法:

0 投票
9 回答
17733 浏览

objective-c - NSCollectionView 中的选择突出显示

我有NSCollectionView一个次要但关键的例外情况。获取并突出显示集合中的选定项目。

在 Snow Leopard 之前,我已经完成了所有这些工作,但似乎发生了一些变化,我无法完全确定它,所以我NSCollectionView回到了基本测试,并按照 Apple 的文档在此处创建 NSCollectionView:

http://developer.apple.com/mac/library/DOCUMENTATION/Cocoa/Conceptual/CollectionViews/Introduction/Introduction.html

按照快速入门指南,集合视图可以正常工作。但是,本指南不讨论除"There are such features as incorporating image views, setting objects as selectable or not selectable and changing colors if they are selected".

以此为例,我进入下一步,NSCollectionView使用控制器键将 Array Controller 绑定到selectionIndexes,认为这将绑定我在NSCollectionView和 数组控制器之间所做的任何选择,从而触发 KVO 通知。我还将NSCollectionViewIB 设置为可选。

似乎没有选择委托,NSCollectionView并且与大多数 Cocoa UI 视图不同,似乎没有默认选择的突出显示。

所以我的问题真的归结为一个相关的问题,但是两个不同的问题。

  1. 如何捕获对项目的选择?
  2. 如何显示项目的亮点?

NSCollectionView的编程指南似乎少之又少,大多数通过 Google 进行的搜索似乎都提取了 Snow Leopard 之前的实现,或者在单独的 XIB 文件中使用视图。

对于后者(视图的单独 XIB 文件),我不明白为什么这应该是先决条件,否则我会怀疑 Apple 不会将视图包含在与集合视图项相同的包中。

我知道这将是一个“只见树木不见森林”的问题——所以我已经准备好迎接“doh!”。片刻。

像往常一样,非常感谢任何和所有帮助。

更新 1

好的,所以我想找到选定的项目,但还没有想出突出显示。对于对确定所选项目感兴趣的人(假设您遵循 Apple 指南):

在控制器(在我的测试用例 App Delegate 中)中,我添加了以下内容:

在 awakeFromNib

新方法

不要忘记为非 GC 解除分配

仍在寻找高光分辨率...

更新 2

接受了 Macatomy 的建议,但仍有问题。发布相关的类方法,看看我哪里出错了。

我的视图.h

我的视图.m

我的CollectionViewItem.h

"MyCollectionViewItem.m*

0 投票
1 回答
726 浏览

objective-c - 想要使用该视图上的删除按钮删除特定的 collectionview 项目

我有一个集合视图项及其原型视图。在该原型视图中,我有一个小 x 按钮。我希望该按钮可以删除它所在的确切集合视图项。

如果我单击 x 按钮周围的空间,我可以删除选定的项目,但如果我在单击项目之前直接单击按钮,它只会删除最后一个选定的项目。

想法?

0 投票
3 回答
1100 浏览

objective-c - NSCollectionViewItem 中的自定义控件

我想在我的 NSCollectionViewItem 的视图中放置一个自定义控件。

假设我有一个名为 BoxesView 的自定义 NSView。BoxesView 只是一个在其视图中绘制预定数量的框的视图。该数量的盒子是在 init 方法中设置的。假设我将其设置为 8。

当我加载集合视图时,视图中的所有其他控件都可以正常工作(按钮、滑块等),但我的视图不会绘制。

如果我在 BoxesView 的 drawRect 方法中设置断点,则显示要绘制的框数为 0!如果我在 init 方法中设置断点,将 numBoxes 设置为 8,则表明 numBoxes 实际上设置为 8。此外,即使集合视图中有多行,init 方法也只会被调用 1 次。

我究竟做错了什么?

更新

我可以通过将 itemPrototype 设置为从 xib 加载而不是与 NSCollectionViewItem 在同一个 xib 中来实现此功能。这很好,除了它只适用于 10.6 而不是 10.5。

更新 2

我想要做的是将我的自定义视图粘贴在已经存在的 NSCollectionViewItem 的视图中。发生的情况是成员变量 mBoxWidth 被吹走并且为零,所以当它去绘制它时,什么也没有发生。

@结尾

0 投票
1 回答
475 浏览

cocoa - 将值从自定义 NSView 传递到 NSCollectionViewItem

我的自定义 NSView 中有一个 NSTabView,用作 NSCollectionView 的原型。在第二个选项卡中,我有 NSButton 按钮和 NSImageView 对象。

NSButton 是触发 NSOpenPanel 的“浏览”按钮。

我已将按钮的选择器连接到 MyCustomView 中的 IBAction,它执行以下操作:

当我在控制台中运行此“myImageView”跟踪“null”时,即使我在 Interface Builder 中将其连接为 IBOutlet。你能解释一下为什么吗?我应该怎么做呢?我还需要在我的 NSCollectionViewItem 对象中将“fileURL”值传递给“representedObject”,但我不知道如何从这里访问它?

0 投票
1 回答
615 浏览

objective-c - NSCollectionViewItem 的项目出口的 NSView 子类没有一致地绘制

我到处寻找这个但没有运气。我在我的项目中使用 NSCollectionView 通过数组控制器绑定到核心数据。为了让它看起来像我想要的那样,我用一个新的 drawRect 方法对 NSView 进行了子类化,并将它与 NSCollectionViewItem 的视图出口连接起来。一切正常,绑定很好,但由于某种原因,它只会在集合视图中的第一个项目上执行自定义绘图。我猜这与 NSCollectionView 在创建新项目时复制笔尖的事实有关。首先是我的 drawRect: 方法:

@结尾

有任何想法吗?

0 投票
1 回答
2276 浏览

objective-c - 使用没有绑定的 NSCollectionView

有没有办法使用NSCollectionView没有绑定的?