首先要做的事情:确保包含ScreenSaver.framework
在您的项目中;它提供了必要的类ScreenSaverView
和ScreenSaverDefaults
.
你说你已经有一个名为ScreenSaverView.m
. 再加上您还说您必须导出您的-hasConfigureSheet
方法才能禁用“屏幕保护程序选项...”按钮。这让我想知道你是否ScreenSaverView
按照你应该做的那样进行了子类化。(您是否NSObject
改为子类化?)为您ScreenSaverView
导出方法-hasConfigureSheet
。您应该继承它,并覆盖其中的适当方法。
还有几件事:
您应该在项目中包含一个 xib 文件,其中包含配置表的 UI,并且您应该IBOutlet
在子类的界面中提供 s 以引用面板和它包含的 UI 元素(您实际上需要插座的那些,那是)。
最后,您的 -configureSheet 方法应该以与此类似的方式获取配置表(在此示例中,configSheet
将是您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;
请注意,我使用id
而不是NSWindow *
or NSPanel *
,仅仅是因为我不知道您实际使用的工作表是什么类。(理想情况下,应该将 NSPanel 用于工作表。)
在您的 nib 文件中,确保File's Owner
是My_ScreensaverView
. 您可以通过选择此对象的图标然后使用身份检查器指定类来确定这一点。
configSheet
在插座和面板之间建立连接。File's Owner
一种方法是在从对象拖动到窗口或面板图标时按住 Control 键,然后configSheet
从出现的弹出窗口中进行选择。
一如既往,祝您工作顺利。