0

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

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

我试过这个:

int myTag = [self tag];

还有这个:

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

两者都没有成功,有什么想法吗?有没有另一种方法让类知道哪个对象正在发送消息?

问候,罗纳德

在此处输入图像描述

4

1 回答 1

1

标签是一个long. NSSliderCells 从 NSActionCell 继承它们的标签,因此有一个与使用 NSSliderCell 的 NSSlider 分开的标签,它从 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不是类方法,它是一个实例方法。(这是正确的词吗?)你能发布产生的代码吗?错误信息?

于 2012-11-30T17:34:55.930 回答