0

私は CustomSlider クラスに取り組んでいます。私のプロジェクトには、CustomSlider クラスを持つ 3 つのスライダーがあります。これら 3 つのスライダーに異なるノブを持たせたいと思います。写真を参照してください。

スライダーには既にタグが付いているので、この目的のためにそれらを使用することにしました。残念ながら、NSSliderCell のタグ値を取得する方法がわかりません。

私はこれを試しました:

int myTag = [self tag];

この:

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

どちらも成功していませんが、何か考えはありますか? どのオブジェクトがメッセージを送信しているかをクラスに知らせる別の方法はありますか?

こんにちは、ロナルド

ここに画像の説明を入力

4

1 に答える 1

1

タグはlong. NSSliderCells は NSActionCell からタグを継承するため、NSControl からタグを継承する NSSliderCell を使用する NSSlider とは別のタグを用意します。カスタム 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 に答える