标签: nscollectionviewitem

选择在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万
查看次数

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
查看次数

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
查看次数

8
推荐指数
1
解决办法
2234
查看次数

获取NSCollectionView中的视图索​​引?

我使用新的基于视图的NSTableView为Mac OS X Lion开发了一个应用程序,但是由于我想将整个应用程序移植到Snow Leopard,我试图找出模拟这样一个tableview的最佳方法.到目前为止,我已经创建了一个NSCollectionView,一切都很好,除了我无法获取触发按钮单击事件的视图的索引.在Lion中我有以下功能:

- (IBAction)buttonClick:(id)sender
Run Code Online (Sandbox Code Playgroud)

所以我可以使用一个方法(我记不起它的名字)来得到tableview里面的视图索引

- (NSInteger)rowForView:(NSView *)aView
Run Code Online (Sandbox Code Playgroud)

使用aView作为发件人的超级视图,但我找不到类似于集合视图的东西...唯一"有用"的方法似乎是

- (NSCollectionViewItem *)itemAtIndex:(NSUInteger)index
Run Code Online (Sandbox Code Playgroud)

(或类似的东西),但这不能帮助我,因为它返回一个NSCollectionViewItem,我甚至无法访问它只知道相应的视图!

indexing cocoa nstableview nscollectionview nscollectionviewitem

7
推荐指数
1
解决办法
3116
查看次数

NSCollectionView什么都没画

我正在尝试建立一个NSCollectionView(我过去成功完成了这个,但由于某种原因,这次失败了).

我有一个名为"TestModel"的模型类,它有一个NSString只返回一个字符串的属性(仅用于测试目的).然后NSMutableArray我在我的主app appate类中有一个属性声明,并且我在这个数组中添加了该TestModel对象的实例.

然后我有一个Array Controller,它的内容数组绑定了app delegate NSMutableArray.我可以确认到目前为止的一切工作正常; NSLogging:

[[[arrayController arrangedObjects] objectAtIndex:0] teststring]
Run Code Online (Sandbox Code Playgroud)

工作得很好.

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

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

// App delegate class

@interface AppController : NSObject {

NSMutableArray *objectArray;
}
@property (readwrite, retain) NSMutableArray *objectArray;
@end

@implementation AppController
@synthesize objectArray;

- (id)init
{
    if (self = [super init]) {
    objectArray = [[NSMutableArray alloc] init];
    }
    return self;
}


- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    TestModel *test = [[[TestModel alloc] initWithString:@"somerandomstring"] autorelease];
    if …
Run Code Online (Sandbox Code Playgroud)

cocoa objective-c nsarraycontroller nscollectionview nscollectionviewitem

7
推荐指数
1
解决办法
2024
查看次数

NSCollectionViewItem双击动作?

当用户双击时,如何设置操作NSCollectionViewItemNSTableView,例如,具有setDoubleAction方法。有类似的东西NSCollectionView吗?

谢谢

cocoa objective-c nscollectionview nscollectionviewitem

5
推荐指数
1
解决办法
1979
查看次数

NSCollectionViewItem永远不会实例化

我在这里有点迷失:我创建了一个像colorPicker一样的按钮:单击它会在弹出框中显示一个collectionView.我首先使用包含视图+ collectionView(嵌入在scrollView + clipView中)的nib fil.东西工作得很好.

由于nib文件非常简单(并且为了提高我在编程方式设计视图时的编码技巧),我决定摆脱nib文件并在代码中编写缺失的部分.问题是,我设法完成工作,除了collectionView的内容.经过深入调查,看来,方法内部:

func collectionView(_ collectionView: NSCollectionView, itemForRepresentedObjectAt indexPath: IndexPath) -> NSCollectionViewItem
Run Code Online (Sandbox Code Playgroud)

这应该是管理数据源的方法

collectionView.makeItem(withIdentifier: String, for: IndexPath)
Run Code Online (Sandbox Code Playgroud)

不起作用.事实上,在:

let item = collectionView.makeItem(withIdentifier: ColorPickerPopover.itemIdentifier, for: indexPath)
Run Code Online (Sandbox Code Playgroud)

item是未初始化的,正如调试器在我介入时说的那样(不是零,未初始化).显然,makeItem方法永远不会从我所创建的子类中实例化任何collectionViewItem.标识符很好,并且调用了collectionView.register函数,就像在nib版本中一样,因为这两个项目在这些点上是相同的.makeItem函数根本不调用我已经子类化的NSCollectionViewItem的loadView方法.

任何线索?

玩笑

macos nscollectionview nscollectionviewitem swift

4
推荐指数
1
解决办法
1830
查看次数

绑定到NSCollectionViewItem会导致Xcode崩溃

使用XCode 4.1每当我尝试使用CollectionView时,我都会遇到崩溃.

这些是我正在做的步骤:

  1. 从新项目中,编辑MainMenu.nib文件.
  2. 将NSCollectionView添加到窗口,该窗口还添加了Collection View Item和新视图
  3. 像NSTextField一样添加一个控件
  4. 选择控件,然后将检查器切换到绑定窗格.
  5. 尝试将某些内容绑定到Collection View Item.在下拉菜单中选择"收集视图项"后,将出现"内部错误"对话框.尝试从此对话框继续使绑定窗格消失,直到您重新启动XCode

这是否会发生在其他人身上,还是只是我遇到过的事情?有没有办法解决它,以允许我绑定到集合视图项(我希望最终绑定到representObject值)在XCode或代码中.

我试图创建一个自定义的NSCollectionViewItem子类,它使用一个单独的nib文件,并将其设置为NSCollectionView的itemPrototype,但事情却非常错误.

macos cocoa nscollectionview nscollectionviewitem

3
推荐指数
1
解决办法
2045
查看次数

NSCollectionView,Swift 4 - 无法调用"注册"

任何人都可以建议如何解决这个NSCollectionView问题?从Swift 3转换为Swift 4并且魔术开始发生:)

码:

let item = NSNib(nibNamed: NSNib.Name(rawValue: "MACollectionViewItem"), bundle: nil)
collectionView.register(item, forItemWithIdentifier: "CollectionViewItem")
Run Code Online (Sandbox Code Playgroud)

第二行错误:

无法register使用类型的参数列表调用' ''(NSNib?, forItemWithIdentifier: String)'

nscollectionview nscollectionviewitem swift swift3 swift4

3
推荐指数
1
解决办法
1925
查看次数

单击取消选择 NSCollectionViewItem

如何通过再次单击 NSCollectionViewItem 来取消选择它?

这是我用于选择和取消选择的代码:

func collectionView(collectionView: NSCollectionView, didSelectItemsAtIndexPaths indexPaths: Set<NSIndexPath>) {
        print("selected")
        guard let indexPath = indexPaths.first else {return}
        print("selected 2")
        guard let item = collectionView.itemAtIndexPath(indexPath) else {return}
        print("selected 3")
        (item as! CollectionViewItem).setHighlight(true)
    }

    func collectionView(collectionView: NSCollectionView, didDeselectItemsAtIndexPaths indexPaths: Set<NSIndexPath>) {
        print("deselect")
        guard let indexPath = indexPaths.first else {return}
        print("deselect 2")
        guard let item = collectionView.itemAtIndexPath(indexPath) else {return}
        print("deselect 3")
        (item as! CollectionViewItem).setHighlight(false)
    }

/////////////////////

    class CollectionViewItem: NSCollectionViewItem {


        func setHighlight(selected: Bool) {

            print("high")
            view.layer?.borderWidth = selected ? 5.0 : …
Run Code Online (Sandbox Code Playgroud)

xcode cocoa flowlayout nscollectionview nscollectionviewitem

2
推荐指数
1
解决办法
960
查看次数

获取NSCollectionViewItem NSButton单击的representObject值

我已经阅读了一些问题,但我发现有些问题令人困惑,我不知道他们是否回答了我的问题.

我已NSCollectionView实现并连接到a Core Data context,一切都正确显示.

现在我已经是buttonsview prototype,当我点击这个按钮,我需要得到的价值representedObject是克隆的看法.

我有阅读和阅读,有些部分让我感到困惑,所以我正在寻找一个简单的解释.

感谢您的时间.

cocoa objective-c nscollectionview nscollectionviewitem

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

NSCollectionViewItem 在 itemForRepresentedObjectAtIndexPath 中有 nil 个出口

我有一个 NSCollectionView 显示一堆称为“ImageCollectionViewItem”的项目。我有一个 ImageCollectionViewItem.xib 文件,它只有一个覆盖该项目的 NSView。我希望能够动态更改该视图中的内容,但是当我尝试引用它时,它为零。我已经检查过这样的问题:UIViewController nil in viewdidload 中的 outlet,这不是我的问题,我链接了它,我有实心圆圈

这是视图控制器扩展:

extension ViewController : NSCollectionViewDataSource {

    func collectionView(collectionView: NSCollectionView, numberOfItemsInSection section: Int) -> Int {
        return titles.count
    }
    func collectionView(collectionView: NSCollectionView, itemForRepresentedObjectAtIndexPath indexPath: NSIndexPath) -> NSCollectionViewItem {
        let item = collectionView.makeItemWithIdentifier("ImageCollectionViewItem", forIndexPath: indexPath) as! ImageCollectionViewItem

        //This is what is nil:
        let thisView = item.iconView

        return item
    }

}
Run Code Online (Sandbox Code Playgroud)

然后这里是 ImageViewCollectionItem 代码

class ImageCollectionViewItem: NSCollectionViewItem {

    @IBOutlet weak var iconView: NSView!

    var numItem: Int?

    override func viewDidLoad() { …
Run Code Online (Sandbox Code Playgroud)

cocoa nscollectionview nscollectionviewitem swift

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