Как я могу получить тег NSSliderCell Objective-C

Я работаю над CustomSlider Class. В моем проекте у меня есть три ползунка, которые все имеют класс CustomSlider. Я хочу, чтобы у этих трех ползунков были разные ручки. Смотрите изображение.

Поскольку у слайдеров уже есть теги, я решил использовать их для этой цели. К сожалению, я не вижу, как получить значение тега NSSliderCell.

Я попробовал это:

int myTag = [self tag];

и это:

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

Оба безуспешно, есть идеи? Есть ли другой способ сообщить классу, какой объект отправляет сообщение?

Привет, Рональд

1 ответ

Решение

Тег является long, NSSliderCells наследуют свой тег от NSActionCell, поэтому имейте тег, отдельный от NSSlider, который использует NSSliderCell, который наследует свой тег от NSControl. В пользовательском классе NSSliderCell [self tag] возвращает набор тегов для sliderCell в XIB.

Вот заголовок для пользовательского класса ячейки слайдера:

#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'. tag это не метод класса, это метод экземпляра. (Это правильное слово?) Можете ли вы опубликовать код, который выдал сообщение об ошибке?

Другие вопросы по тегам