问题标签 [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 投票
1 回答
1295 浏览

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

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

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

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

0 投票
2 回答
2957 浏览

cocoa - NSTableView 和 NSCollectionView 的区别

我正在尝试决定开发我的 Snow Leopard 应用程序的路径。首先,我应该先介绍明显的区别:

NSTableView可以有多列数据来表示数据(一行)的同一“元素”的不同部分,其中NSCollectionView也可以显示数据网格,但每行+列组合都是它自己的元素。出于我的目的,假设我正在处理一个列。

  1. 据我所知,NSCollectionView物品都是NSViews ,它们都必须具有相同的尺寸。此外,与 不同NSTableView,collectionview 项目被复制到NSCollectionView而不是根据需要由 a 提供dataSource(我对此不确定,如果我错了,请纠正我)。

  2. NSTableViewNSCell如果您决定自定义行的显示,则使用s。NSCell不是一个,如何处理事件(如果NSResponder我想向单元格添加某种附件,例如 iTunes 中的箭头如何工作(尽管 iTunes 是 Carbon)。我NSCell在 IB 中看到了一些出现的子类是他们NSControl兄弟的等价物,但是如果我想MySweetView在一个对象中有对象NSCell呢?)。

  3. 两者在 Bindings 方面的工作似乎大致相同,对吗?

  4. 最后,NSCollectionView似乎可以很好地使用其元素的动画(例如用于重新排列项目或过滤它们)。可以NSTableView用它的行做到这一点吗?

还有什么我应该考虑的吗?

0 投票
1 回答
973 浏览

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

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

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

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

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

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

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

解决方案更新

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

到基于 0 的起始点:

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

0 投票
1 回答
2395 浏览

cocoa - 如何在 Cocoa 中实现基于缩略图的用户选择视图?

我有一个我认为非常简单的需求,但我不知道如何去实现它。

在我的界面中的各个点,用户被要求选择一些相当直观的东西(比如选择页面布局或颜色选项)。这些选择是从一组预定义的选项中做出的。通常你会使用 NSPopUpButton,或者 NSTableView,但我希望用户看到每个选择选项的缩略图。这些缩略图也应该是合适的尺寸——至少 100x100 像素。每个缩略图还应附有文本标签。一次只允许选择一个。

Apple 在 iWeb 中实现了类似这样的功能:

iweb http://img187.imageshack.us/img187/5744/iweb.jpg

当然,你已经习惯了用小图标看到这样的东西:

代码

我认为 NSCollectionView 是开始的地方,但我只见过在更复杂的场景中使用它(例如:显示目录的内容,支持拖放等)因此,大多数我发现的代码相当复杂。

是否有更简单的解决方案来使用静态、预定义的数据填充此视图并只允许进行简单的选择?换句话说,我正在寻找弹出按钮的功能,但需要不同的用户界面。

更新:解决方案

我按照建议使用了 IKImageBrowser。本教程非常有帮助。在 IB 中:我只是在我的界面中制作了一个 IKImageBrowser,将其包裹在一个滚动视图中,并使其成为浏览器对象的数据源。在代码中:按照教程中的说明在我的控制器中实现数据源协议,将allowMultipleSelection 和allowEmptySelection 设置为NO,完全按照教程中的说明使用URL 图像表示创建自定义图像对象。

然后,为了获得选择,我编写了以下方法以在用户单击“确定”按钮时触发:

该教程非常有用——只需忽略有关添加图像和缩放滑块等的内容。

0 投票
1 回答
238 浏览

nstableview - Cocoa 界面设计问题

对于我正在设计的窗口来说,最好的事情是一个表格,每个数组元素都有两行。我在第一行有一个复选框和两个弹出窗口,第二行将用于文本输入。根据我对 NSTableView 的理解,这是不可能的。我查看了 NSCollectionView,但我没有任何经验,所以我的选择是标准的四列表或处理 NSCollectionView。在我这样做之前,我想获得更有经验的 Cocoa 开发人员的意见。

谢谢

0 投票
8 回答
9329 浏览

cocoa - NSCollectionView 可以自动调整其子视图的宽度以显示一列

我有一个NSCollectionView包含CustomViews. 最初,它将子视图平铺成列和行,就像网格一样。然后我将ColumnsIB 中的属性设置为 1,所以现在它只是逐行显示它们。然而,即使 myCustomView是 400px 宽,它被设置为自动调整大小,它NSCollectionView是 400px 宽,并且它被设置为 1 列,子视图被绘制大约 80px 宽。

我知道我可以通过调用来解决这个问题:

但是将此代码放在awakeFromNibmy 的方法中WindowController仅在程序启动时设置正确的宽度。当我调整窗口大小(以及NSCollectionView我指定的自动调整大小)时,CustomViews 保持最初设置的宽度。

如果需要,我很乐意自己调整子视图的大小,但我对 Cocoa 还是很陌生,似乎找不到任何文章来解释如何做这样的事情。有人可以指出我正确的方向吗?

安东尼

0 投票
1 回答
337 浏览

objective-c - 调试嵌套的 NSCollectionViews

我不确定如何开始调试此问题。

我有一个 NSCollectionView,它的 NSCollectionViewItem 原型视图本身包含一个 NSCollectionView(以及一个 NSArrayController,为这个第二级集合视图提供内容)。当顶级视图位于主笔尖时,两个级别的集合视图都可以正常工作。

但是,当我将视图(并重新连接所有适当的绑定)复制/粘贴到我加载的新笔尖时,loadNibNamed:owner:第二级视图(而不是顶级视图)显示为空白。

经过一番调查,我发现myArrayController.arrangedObjects.@count确实是 0。但是,控制器绑定到的 NSArray(文件所有者的representedObject.quizzes),当被要求时.@count,返回 2。

quizzes确实应该返回 2,因为我已经完成了[testCategoryA setQuizzes:[NSArray arrayWithObjects:testQuizA1,testQuizA2,nil]];。我已经测试过在加载笔尖之前和之后设置测验。两种情况的情况都是一样的。

所以,总而言之,我有 2 个级别的集合视图,以及 2 个级别的数组控制器。顶层总是有效的。但是,只要顶层不在主 nib 文件中,第二层就会中断。在我看来,第二级中断的部分是数组控制器的绑定。

我什至不知道如何在这乱七八糟的笔尖中开始调试。建议?

0 投票
1 回答
1374 浏览

objective-c - 有没有办法在 NSCollectionView 中有不同的视图?

当您可以选择不同的模板并且每个视图包含不同的信息具有不同的大小等时,我想要类似于 iWork 如何为 Pages 提供模板选择屏幕的东西。

我已经尝试继承 NSCollectionView 并使用 newItemForRepresentedObject 方法确定要显示的视图(而不是使用 itemPrototype 视图界面生成器),但由于某种原因它没有正确定位视图,并且它没有显示正确的视图数量存在的项目数。这是我的代码。我希望有人可能有更好的方法来做到这一点,或者一个如何做到这一点的例子。

personView 和 companyView 是子类 NSCollectionView 中的属性,它们是 IB 中视图的 IBOutlets。

}

0 投票
1 回答
2670 浏览

iphone - 用于 Cocoa-Touch (iPhone/iPad) 的 NSCollectionView

Is 开始实现一个,但想知道是否有人知道已经存在的 NSCollectionView 类,例如可可触摸类。

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*