询问 NSSlider 用户是否仍然按下鼠标按钮? (swift)

Ask NSSlider if the user still has the mouse button pressed? (swift)

您好,我正在 swift 中实现 NSSlider 和 NSSliderCell 的子 class,我想 check/retrieve 来自 NSSliderCell 的 _scFlags.isPressed 属性 ,我发现 Objective-C 中有一个 'hack' 可以在从另一个 class 调用时执行此操作(如果您在 [=27= 中使用 subclass NSSlider,则不需要]):

http://www.cocoabuilder.com/archive/cocoa/54913-nsslider.html

然而,在 swift 中,当我在 API(AppKit -> NSSliderCell)中搜索时,我可以找到一个我认为是我需要的结构,除了初始化()里面:

public struct __sliderCellFlags {
    public init()
}

而且我什至无法从子class 中调用它。所有这些都显示为错误:

self.__sliderCellFlags 
self._scFlags
super.__sliderCellFlags
super._scFlags

我错过了什么吗?是否有不同的方式来调用这些属性?

使用 Objective-C 在 NSSliderCell 上实现一个类别,它有一个 属性 来访问结构数据并使用 Swift 中的 属性。

NSSlider+FlagsAccessor.h

@interface NSSlider (FlagsAccessor)

@property (nonatomic, readonly) BOOL isPressed;

@end

NSSlider+FlagsAccessor.m

#import "NSSlider+FlagsAccessor.h"

@interface NSSliderCell (FlagsAccessor)

@property (nonatomic, readonly) BOOL isPressed;

@end

@implementation NSSlider (FlagsAccessor)

- (BOOL)isPressed
{
    NSSliderCell *cell = self.cell;

    return cell.isPressed;
}

@end

@implementation NSSliderCell (FlagsAccessor)

- (BOOL)isPressed
{
    return self->_scFlags.isPressed == 1;
}

@end

然后从 Swift 使用它只需调用 self.isPressedHere's a sample project.

不要忘记在您的桥接 header 中导入您的类别 header(Xcode 将在您添加 [=25] 时提示您创建桥接 header =] 代码到 Swift 项目)。