如何获取NSSliderCell Objective-C的标记

时间:2012-11-30 16:06:02

标签: objective-c tags nsslider

我正在使用CustomSlider类。 在我的项目中,我有三个滑块,它们都有CustomSlider类。 我希望这三个滑块有不同的旋钮。见图。

由于滑块已有标签,我决定将它们用于此目的。 不幸的是我没有看到如何获得NSSliderCell的标签值。

我试过了:

int myTag = [self tag];

和此:

NSButton *button = [super self];
int myTag = [button tag];

两者都没有成功,任何想法? 是否有另一种方法让班级知道哪个对象正在发送消息?

问候,罗纳德

enter image description here

1 个答案:

答案 0 :(得分:1)

标签是long。 NSSliderCells从NSActionCell继承它们的标签,因此有一个与NSSlider分开的标签,它使用NSSliderCell,它继承了NSControl的标签。在自定义NSSliderCell类中,[self tag]确实返回XIB中sliderCell的标记集。

以下是自定义滑块单元类的标题:

#import <AppKit/AppKit.h>
@interface EWSliderCell : NSSliderCell
@end

这是整个班级本身:

#import "EWSliderCell.h"
@implementation EWSliderCell
-(NSRect)rectOfTickMarkAtIndex:(NSInteger)index {
    static BOOL reportedTag;
    if (!reportedTag) {
        long myTag = [self tag];
        NSLog(@"myTag=%ld", myTag);
        reportedTag = TRUE;
    }
    return CGRectMake(0.0, 0.0, 0.0, 0.0); // remove the tick marks from the slider
}
@end

这确实会执行并报告正确的标记。

我无法复制您报告的错误消息。但是,如果我(错误地)写myTag = [EWSliderCell tag];,那么我会看到消息“选择器'标签'没有已知的类方法。tag不是类方法,它是一个实例方法。(是不是单词?)你能发布产生错误信息的代码吗?