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

Cocoa 询问NSSlider用户是否仍按下鼠标按钮?(swift),cocoa,swift2,xcode7,nsslider,Cocoa,Swift2,Xcode7,Nsslider,您好,我正在swift中实现NSSlider和NSSliderCell的子类,我想从NSSliderCell中检查/检索_scFlags.isPressed属性,我发现Objective-C中有一个“hack”在从另一个类调用时执行此操作(如果您在Objective-C中对NSSlider进行子类化,则不需要此操作): 但是,在swift中,当我在API(AppKit->NSSliderCell)中搜索时,我可以找到一个我认为是我所需要的结构,除了里面的init()之外,没有其他内容: 我甚至

您好,我正在swift中实现NSSlider和NSSliderCell的子类,我想从NSSliderCell中检查/检索_scFlags.isPressed属性,我发现Objective-C中有一个“hack”在从另一个类调用时执行此操作(如果您在Objective-C中对NSSlider进行子类化,则不需要此操作):

但是,在swift中,当我在API(AppKit->NSSliderCell)中搜索时,我可以找到一个我认为是我所需要的结构,除了里面的init()之外,没有其他内容:

我甚至不能从子类中调用它。所有这些都显示为错误:

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

我错过什么了吗?是否有其他方法调用这些属性?

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

NSSlider+FlagsAccessor.h NSSlider+FlagsAccessor.m 然后,要从Swift使用它,只需调用self.isPressed


别忘了在桥接头中导入类别头(当您将Objective-C代码添加到Swift项目时,Xcode将提示您创建桥接头)。

这太棒了,在他们在Swift API中对此做点什么之前,这将是一个很好的解决方法,谢谢!最后一个问题。如果我要在您的示例项目中为@IBOutlet弱var sliderCell:NSSliderCell添加一个IBOutlet!还有一个操作可以访问它的.isPressed属性,比如:sliderCell.isPressed我应该向objective-C类添加什么来允许这样做?现在它不能做,我也不能做slider.cell.isPressedIt实际上很奇怪,我看你不应该做任何事情,应该把它捡起来。。。当我看到错误时,我右键单击isPressed属性并跳转到定义,它确实要求我从选项中选择正确的位置,Xcode中是否存在错误?为什么需要
slider.cell.isPressed
?只需使用
slider.isPressed
(它在后台调用
self.cell.isPressed
,查看实现)。
self.__sliderCellFlags 
self._scFlags
super.__sliderCellFlags
super._scFlags
@interface NSSlider (FlagsAccessor)

@property (nonatomic, readonly) BOOL isPressed;

@end
#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