まず最初に: 必ず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 Ownernib ファイルで、が のインスタンスであることを確認してくださいMy_ScreensaverView。これを決定するには、このオブジェクトのアイコンを選択し、アイデンティティ インスペクタを使用してクラスを指定します。
configSheetコンセントとパネルを接続します。これを行う 1 つの方法は、Ctrl キーを押しながらFile's Ownerオブジェクトからウィンドウまたはパネル アイコンにドラッグし、表示configSheetされるポップアップから選択することです。
いつものように、あなたの努力に幸運を。