标签: nscollectionview

选择在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".

以此为例,我进入了将Array Controller NSCollectionView与控制器键绑定的下一步selectionIndexes,认为这将绑定我NSCollectionView在阵列控制器之间做出的任何选择,从而触发KVO通知.我还设置了NSCollectionView在IB中可选择.

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

所以我的问题实际上归结为一个相关的问题,但有两个截然不同的问题.

  1. 如何捕获项目的选择?
  2. 如何显示项目的突出显示?

NSCollectionView编程指南似乎很少,而且大多数通过Google搜索似乎都会提升Snow Leopard之前的实现,或者在单独的XIB文件中使用该视图.

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

我知道这将是一个"无法看到木头为树"的问题 - 所以我已经为"doh!"做好了准备.时刻.

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

更新1

好的,所以我想找到所选的项目,但尚未确定突出显示.有兴趣计算所选项目(假设您正在关注Apple指南):

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

在awakeFromNib中

[personArrayController addObserver:self
       forKeyPath:@"selectionIndexes" 
       options:NSKeyValueObservingOptionNew
       context:nil];
Run Code Online (Sandbox Code Playgroud)

新方法

-(void)observeValueForKeyPath:(NSString *)keyPath 
                     ofObject:(id)object
                       change:(NSDictionary *)change
                      context:(void *)context
{
    if([keyPath isEqualTo:@"selectionIndexes"])
    {
        if([[personArrayController …
Run Code Online (Sandbox Code Playgroud)

cocoa objective-c nsview nscollectionview nscollectionviewitem

32
推荐指数
4
解决办法
2万
查看次数

如何从头开始以编程方式创建NSCollectionView?

NSCollectionView仍然是我见过的Cocoa API中最神秘的部分之一.文档很差,并且有许多移动部件,其中许多通常在Interface Builder中实现,使文档具有挑战性.

请提供示例代码以创建最简单的情况,NSCollectionView其中显示文本字段或按钮而不使用Xcode,其中每个文本字段或按钮具有不同的标题.假设一个新的Xcode项目使用默认的windowIBOutlet.

对于此示例,在数据源更改时不需要绑定来更新NSCollectionView.只需显示原型对象的网格,并将每个对象的标题设置为某个值.

如果我们能够为很多人提供一个如何做到这一点的好例子,我认为这将有助于所有与之合作NSCollectionViews并且和我一样困惑的人.

请求摘要

  • 提供示例代码以在新的Xcode项目中呈现NSCollectionView
  • 不要使用Interface Builder,请使用提供的IBOutlet默认窗口
  • NSCollectionView应包含文本字段或按钮,您的选择
  • 视图中的每个项目都应具有不同的标题
  • 不需要绑定

如果有符合这些要求的示例代码,请提供一个很棒的链接!

xcode cocoa nscollectionview

32
推荐指数
2
解决办法
2万
查看次数

Cocoa - NSCollectionView和NSCollectionViewItem之间的链接在哪里?Xcode 6 Bug?

将NSCollectionView拖动到视图时,故事板上会出现一个NSCollectionViewItem,它会浮动.

想象一下,我将几个NScollectionView拖到同一个视图中.我将有一堆NSCollectionViewItems.集合视图如何知道哪个NScollectionViewItem属于它?在界面构建器上可以看到两者之间是否存在连接?我在界面构建器上看不到任何内容?我在哪做什么?

编辑:显然这似乎是一个Xcode错误.当您向故事板添加NSCollectionView时,它没有指向NSCollectionViewItem的链接,似乎无法在它们之间连接itemPrototype出口.

在与Apple联系了这样的错误之后,他们的答案是:"这是OS X上Storyboard的一个已知问题.请改用Xibs."

cocoa nscollectionview nscollectionviewitem

21
推荐指数
1
解决办法
7933
查看次数

未知的segue关系:使用NSCollectionView的原型

只需向Storyboard添加一个NSCollectionView,代码就不会编译错误:未知的segue关系:Prototype.

这是Swift/XCode6-beta4的已知错误还是我错过了什么?

storyboard nscollectionview swift xcode6

12
推荐指数
3
解决办法
2665
查看次数

NSCollectionView拖放占位符大小

我已经成功地拖延了我的工作NSCollectionView,但是视觉外观和行为存在一些问题.主要问题是放置区/占位符的大小错误,即它小于集合视图的大小minItemSize.我已经搜索了文档,但看不出任何指定方法.

我的第二个问题是,我希望单元格图像在被拖动时实际移动,而不是仅仅具有半透明副本.

这是当前的行为:

目前的行为

这是我想要的行为(在Sketch中使用):

期望的行为

任何建议将不胜感激.如果任何代码有用,请告诉我 - 我不确定哪些部分与解决这个问题相关.谢谢!

macos cocoa drag-and-drop appkit nscollectionview

12
推荐指数
0
解决办法
285
查看次数

使用 Shift 键扩展 NSCollectionView 中的选择

我最近审查了我一年前发布的一个应用程序。而且我看到现在NSCollectionView它的内部已经失去了选择功能,例如 SHIFT + Select 现在它表现为 CMD + Select。

(第二个问题:用鼠标拖动时我也没有得到选择矩形。)

显然我想要这个功能回来,使用 shift 会将选择从先前单击的单元格扩展到 shift 单击的单元格。

我做了什么:

//NSCollectionView * _picturesGridView; //is my iVar

//In initialization I have set my _picturesGridView as follows
//Initializations etc are omitted -- (only the selection related code is here)
[_picturesGridView setSelectable:YES];
[_picturesGridView setAllowsMultipleSelection:YES];
Run Code Online (Sandbox Code Playgroud)

问题:是否有一种简单的方法可以恢复此功能?我在文档中没有看到任何相关的内容,并且在互联网上找不到任何解决方案。

子问题:如果没有简单的方法来实现这一点 -> 我应该继续创建自己的FancyPrefix##CollectionViewClass功能并按照我的意愿重新实现这个功能 - 还是最好跳过现有的NSCollectionView并强制它按照我的意愿行事?

子注:好吧,如果我发现自己重新实现它,它将是一个轻量级的类,它只会满足我自己的需求——我的意思是我不会模仿整个NSCollectionView类。

PS 我可以通过单击来选择一个项目我只能使用 CMD+Click 或 SHIFT+Click 来选择多个项目,但后者的行为与我不想要的 CMD+Click 完全一样。

至于鼠标选择矩形 - 我没有覆盖任何鼠标事件。不清楚为什么我没有这个功能。

macos cocoa objective-c nscollectionview swift

11
推荐指数
1
解决办法
902
查看次数

悬停在NSCollectionView中的效果

我有NSCollectionView几个NSViews.其中NSView有一个NSBox在选择时改变颜色.我还希望NSBox在悬停时改变颜色.

我继承NSBox并添加了mouseEnteredmouseExited方法.我addTrackingRect在里面使用viewWillMoveToWindow但问题是只有当我第一次选择框所在的子视图时才会发生悬停效果.

此外,只有选中的框会在其上发生悬停效果.如何实现悬停过度效果,使NSView我的所有s NSCollectionView立即显示效果?

xcode cocoa objective-c nsview nscollectionview

10
推荐指数
1
解决办法
1158
查看次数

10.11 NSCollectionView - 动态确定单元大小

适用于OS X v10.11的AppKit发行说明建议可以基于每个项目调整集合视图项目的大小:

可以为所有CollectionView的项目全局确定项目大小(通过设置NSCollectionViewFlowLayout的"itemSize"属性),也可以从一个项目到下一个项目(通过在CollectionView的委托上实现-collectionView:layout:sizeForItemAtIndexPath:)进行更改.

在我的例子中,我的CollectionViewItem包含一个包含不同长度字符串的标签.我正在使用NSCollectionView来显示字符串数组,因为NSStackViews不支持数组绑定,并且不会流向新行.字符串数组通过数组控制器绑定到NSCollectionView的内容.

我的项目的nib文件已正确设置,根视图和标签都具有内容拥抱内容压缩阻力优先级1000,并且边缘通过AutoLayout对齐.

现在,NSCollectionViewLayout的委托方法具有以下签名:

func collectionView(collectionView: NSCollectionView, 
                    layout collectionViewLayout: NSCollectionViewLayout, 
                    sizeForItemAtIndexPath indexPath: NSIndexPath) -> NSSize
Run Code Online (Sandbox Code Playgroud)

我现在的想法是抓住项目本身,对其进行布局传递,然后返回新项目大小.

let item = collectionView.itemAtIndexPath(indexPath)!
item.view.layout()
return item.view.bounds.size
Run Code Online (Sandbox Code Playgroud)

这种方法的问题是itemAtIndexPath返回nil.如果我以零值返回默认大小,则默认大小将用于所有单元格.

如何设置NSCollectionView以尊重我的项目的AutoLayout约束,并为每个单元格动态使用计算的大小?

macos cocoa nscollectionview nscollectionviewitem autolayout

10
推荐指数
1
解决办法
2211
查看次数

NSCollectionView没有弹出上下文菜单?

我已将菜单绑定到界面构建器中的NSCollectionView.但是当我按住CTRL并单击(右键单击)时,菜单没有显示.

我试过在NSCollectionView子类中添加一些方法.它们都没有被调用:

+ (NSMenu*)defaultMenu
- (NSMenu *)menuForEvent:(NSEvent *)theEvent
- (void)rightMouseDown:(NSEvent *)theEvent
- (void)sendEvent:(NSEvent *)theEvent
Run Code Online (Sandbox Code Playgroud)

唯一被调用的方法是:

- (NSView *)hitTest:(NSPoint)aPoint
Run Code Online (Sandbox Code Playgroud)

这意味着NSCollectionView接收鼠标事件.

我也尝试将相同的方法添加到NSCollectionViewItem的子类中,结果是相同的.只有hitTest:被召唤.

macos events cocoa objective-c nscollectionview

10
推荐指数
2
解决办法
666
查看次数

带有节的NSCollectionView - 就像在iPhoto中一样

我想构建一个类似于iPhoto '11中的NSCollectionView.我想在部分中分组几个图片,并创建一个部分标题.特定部分的节标题始终可见,直到该节的最后一个元素可见.你可以看看图片,看看我的意思.

编辑:我应该补充说,内容不是图像.

在此输入图像描述

提前致谢

xcode cocoa iphoto nscollectionview

9
推荐指数
1
解决办法
2493
查看次数