我正在使用CustomSlider类。 在我的项目中,我有三个滑块,它们都有CustomSlider类。 我希望这三个滑块有不同的旋钮。见图。
由于滑块已有标签,我决定将它们用于此目的。 不幸的是我没有看到如何获得NSSliderCell的标签值。
我试过了:
int myTag = [self tag];
和此:
NSButton *button = [super self];
int myTag = [button tag];
两者都没有成功,任何想法? 是否有另一种方法让班级知道哪个对象正在发送消息?
答案 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
不是类方法,它是一个实例方法。(是不是单词?)你能发布产生错误信息的代码吗?