cocoa - 双击 NSCollectionView

标签 cocoa nscollectionview

我试图让我的程序识别 NSCollectionView 的双击。我尝试遵循本指南:http://www.springenwerk.com/2009/12/double-click-and-nscollectionview.html但是当我这样做时,什么也没有发生,因为 IconViewBox 中的委托(delegate)为空:

.h 文件:

@interface IconViewBox : NSBox
{
    IBOutlet id delegate;
}
@end

m 文件:

@implementation IconViewBox

-(void)mouseDown:(NSEvent *)theEvent {
    [super mouseDown:theEvent];

    // check for click count above one, which we assume means it's a double click
    if([theEvent clickCount] > 1) {
        NSLog(@"double click!");
        if(delegate && [delegate respondsToSelector:@selector(doubleClick:)]) {
            NSLog(@"Runs through here");
            [delegate performSelector:@selector(doubleClick:) withObject:self];
        }
    }
}

第二个 NSLog 永远不会被打印,因为 delegate 为 null。我已连接 nib 文件中的所有内容并按照说明进行操作。有谁知道为什么或替代为什么这样做?

最佳答案

您可以通过对集合项的 View 进行子类化来捕获 Collection View 项中的多次点击。

  1. 子类 NSView 并添加 mouseDown: 方法来检测多次点击
  2. 将 Nib 中 NSCollectionItem 的 View 从 NSView 更改为 MyCollectionView
  3. 在关联的NSWindowController中实现collectionItemViewDoubleClick:

这是通过让 NSView 子类检测双击并传递响应者链来实现的。响应程序链中第一个实现 collectionItemViewDoubleClick: 的对象被调用。

通常,您应该在关联的 NSWindowController 中实现 collectionItemViewDoubleClick:,但它可以在响应程序链内的任何对象中。

@interface MyCollectionView : NSView
/** Capture double-clicks and pass up responder chain */
-(void)mouseDown:(NSEvent *)theEvent;
@end

@implementation MyCollectionView

-(void)mouseDown:(NSEvent *)theEvent
{
    [super mouseDown:theEvent];

    if (theEvent.clickCount > 1)
    {
        [NSApplication.sharedApplication sendAction:@selector(collectionItemViewDoubleClick:) to:nil from:self];
    }
}

@end

关于cocoa - 双击 NSCollectionView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14574334/

相关文章:

objective-c - NSMutableArray,分配还是容量?

ios - 限制 iOS 5 中的同时 NSURLConnection 请求数?

macos - 如何使用 indexOf 获取所选 NSCollectionView 的索引?

swift - NSCollectionViewFlowLayout collectionViewContentSize 更新但 Collection View 框架不更新

swift - 分成三个符号的单个表情符号

swift - 使用 NSCollectionView 时断言失败

objective-c - 为什么 cocoa 不在所有地方都使用相同的枚举声明样式?

macos - 获取 Cocoa 中事件应用程序中当前选定的文本

swift - 访问 Controller View 中的复选框 (NSButton)

objective-c - 获取NSCollectionViewItem NSButton click的representedObject值