12

我的 Mac 应用程序中有一些 NSImageView,用户可以在其中拖放 .png 或 .pdf 等对象,以将它们存储到用户共享默认值中,效果很好。

我现在想为用户双击这些 NSImageView 设置一个动作,但这似乎有点困难(我对 NSTableView 没有任何问题,但是 NSImage 没有“setDoubleAction”,还有很多答案(这里或与谷歌)关于 NSImageView 的操作指向制作 NSButton 而不是 NSImageView,所以这无济于事)

这是我的 AppDelegate.h 的一部分:

@interface AppDelegate : NSObject <NSApplicationDelegate>{

    (...)

    @property (assign) IBOutlet NSImageView *iconeStatus;

    (...)

@end

这是我的 AppDelegate.m 的一部分:

#import "AppDelegate.h"

@implementation AppDelegate

(...)

@synthesize iconeStatus = _iconeStatus;

(...)

- (void)awakeFromNib {

    (...)

[_iconeStatus setTarget:self];
[_iconeStatus setAction:@selector(doubleClick:)];

    (...)

}

(...)

- (void)doubleClick:(id)object {
        //make sound if that works ...
        [[NSSound soundNamed:@"Basso"] play];

}

但这不起作用。

谁能告诉我最简单的方法是什么?

4

3 回答 3

17

您需要继承 NSImageView 并将以下方法添加到子类的实现中:

- (void)mouseDown:(NSEvent *)theEvent
{
    NSInteger clickCount = [theEvent clickCount];

    if (clickCount > 1) {
        // User at least double clicked in image view
    }
}
于 2013-07-15T14:18:13.620 回答
7

Swift 4 的代码。NSImageView 再次被子类化,并且 mouseDown 函数被覆盖。

class MyImageView: NSImageView {

    override func mouseDown(with event: NSEvent) {
        let clickCount: Int = event.clickCount

        if clickCount > 1 {
            // User at least double clicked in image view
        }
    }

}
于 2018-05-01T19:29:20.313 回答
1

另一种解决方案使用extension

extension NSImageView {
    override open func mouseDown(with event: NSEvent) {
        // your code here
    }
}

虽然这会将该功能添加到每个 NSImageView,但也许这不是您想要的。

于 2018-06-21T16:17:38.557 回答