まず最初に: 必ずScreenSaver.framework
プロジェクトに含めてください。必要なクラスScreenSaverView
と を提供しますScreenSaverDefaults
。
というファイルが既にあると言いますScreenSaverView.m
。-hasConfigureSheet
「スクリーンセーバーオプション...」ボタンを無効にするには、メソッドをエクスポートする必要があるとも言っています。これは、あなたがすべきだったようにサブクラス化したかどうか疑問に思いますScreenSaverView
。NSObject
(代わりにサブクラス化しましたか?)ScreenSaverView
などのメソッドをエクスポート-hasConfigureSheet
します。それをサブクラス化し、その中の適切なメソッドをオーバーライドする必要があります。
さらにいくつかのこと:
構成シートの UI を含むプロジェクトに xib ファイルを含める必要があります。またIBOutlet
、サブクラスのインターフェイスに を提供して、パネルとそこに含まれる UI 要素 (実際にアウトレットが必要なもの) を参照する必要があります。あれは)。
最後に、-configureSheet メソッドは、次のような方法で構成シートをフェッチする必要があります (この例でconfigSheet
は、あなたの の 1 つになりますIBOutlet
)。
if (configSheet == nil)
{
if ([NSBundle loadNibNamed:@"myConfigSheet" owner:self] == NO)
{
NSLog(@"load config sheet failed");
}
}
// then retrieve your defaults and set up your sheet; you should
// be working with ScreenSaverDefaults, a subclass of NSUserDefaults.
// then return 'configSheet'
編集:
すでに知っていることをお話ししようとしている場合は、あらかじめお詫び申し上げますconfigSheet
。
でMy_ScreensaverView.h
、パネルのアウトレットを宣言します。
IBOutlet id configSheet;
orid
の代わりに使用したことに注意してください。単にシートに実際に使用しているクラスがわからないためです。(理想的には、NSPanel をシートに使用する必要があります。)NSWindow *
NSPanel *
File's Owner
nib ファイルで、が のインスタンスであることを確認してくださいMy_ScreensaverView
。これを決定するには、このオブジェクトのアイコンを選択し、アイデンティティ インスペクタを使用してクラスを指定します。
configSheet
コンセントとパネルを接続します。これを行う 1 つの方法は、Ctrl キーを押しながらFile's Owner
オブジェクトからウィンドウまたはパネル アイコンにドラッグし、表示configSheet
されるポップアップから選択することです。
いつものように、あなたの努力に幸運を。