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

时间:2015-09-17 19:02:56

标签: cocoa swift2 xcode7 nsslider

您好我在swift中实现了NSSlider和NSSliderCell的子类,我想从NSSliderCell检查/检索_scFlags.isPressed属性,我发现有一个' hack'在Objective-C中从另一个类调用时执行它(如果你在Objective-C中继承NSSlider,则不需要这样做):

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

然而,在swift中,当我在API(AppKit - > NSSliderCell)中搜索时,我可以找到一个我认为是我需要的结构,除了内部的init()之外别无其他:

public struct __sliderCellFlags {
    public init()
}

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

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

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

1 个答案:

答案 0 :(得分:0)

使用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

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