询问 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.isPressed
。 Here's a sample project.
不要忘记在您的桥接 header 中导入您的类别 header(Xcode 将在您添加 [=25] 时提示您创建桥接 header =] 代码到 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.isPressed
。 Here's a sample project.
不要忘记在您的桥接 header 中导入您的类别 header(Xcode 将在您添加 [=25] 时提示您创建桥接 header =] 代码到 Swift 项目)。