如何让NSSlider的一部分停在刻度线上?

时间:2009-05-02 22:30:41

标签: objective-c cocoa

我希望有一个NSSlider除了最后两个之外没有捕捉到滴答点。这与“系统偏好设置”中的滑块的行为相同 - >节能器 - >电脑睡眠。关于如何做到这一点的任何想法?

2 个答案:

答案 0 :(得分:2)

我不知道一个简单的方法,但如果归结为它你可以创建自己的NSSliderCell子类并覆盖这三种方法中的部分或全部:

- (BOOL)startTrackingAt:(NSPoint)startPoint inView:(NSView *)controlView;
- (BOOL)continueTracking:(NSPoint)lastPoint at:(NSPoint)currentPoint inView:(NSView *)controlView;
- (void)stopTracking:(NSPoint)lastPoint at:(NSPoint)stopPoint inView:(NSView *)controlView mouseIsUp:(BOOL)flag;

答案 1 :(得分:0)

我认为最好的方法是将NSSliderCell和override子类化为部分或全部tick方法。

- (double)closestTickMarkValueToValue:(double)aValue

我的猜测是,该方法允许您选择要停留的点,但如果这不起作用....

你可以使NSSlider连续。当用户移动滑块时,您的目标将收到您设置的操作。一旦达到/低于阈值,您可以更改它是否仅在刻度线处停止。这可能是也可能不是你正在寻找的东西(因为它不能很好地用于绑定等),但它可能是黑客攻击。