Objective c 如何设置OSX屏幕保护程序配置表?

Objective c 如何设置OSX屏幕保护程序配置表?,objective-c,macos,osx-mountain-lion,screensaver,Objective C,Macos,Osx Mountain Lion,Screensaver,我正在为OSX(Mountain Lion)开发屏幕保护程序,设置配置表时遇到问题(因此,当用户在系统首选项中单击“屏幕保护程序选项…”时,我的选项就会出现)。在互联网上,似乎只有两三本关于编写OSX屏幕保护程序的教程,而且它们都有好几年的历史了,所以这些材料并没有完全转化为OSX 10.8和Xcode 4 首先,在我的ScreenSaverView.m文件中,我有: - (BOOL)hasConfigureSheet { return NO; } - (NSWindow*)confi

我正在为OSX(Mountain Lion)开发屏幕保护程序,设置配置表时遇到问题(因此,当用户在系统首选项中单击“屏幕保护程序选项…”时,我的选项就会出现)。在互联网上,似乎只有两三本关于编写OSX屏幕保护程序的教程,而且它们都有好几年的历史了,所以这些材料并没有完全转化为OSX 10.8和Xcode 4

首先,在我的
ScreenSaverView.m
文件中,我有:

- (BOOL)hasConfigureSheet
{
    return NO;
}

- (NSWindow*)configureSheet
{
    return nil;
}
…然而,在系统首选项中,“屏幕保护程序选项…”按钮仍然可以单击(单击时不会发生任何事情),而不是像“Arabesque”屏幕保护程序中那样禁用

单击按钮时显示配置表的步骤是什么?为什么按钮当前未禁用


编辑:


我意识到为什么“屏幕保护程序选项…”按钮没有被禁用。我忘了包括
-(BOOL)hasConfigureSheet
屏幕保护视图.h
文件中。但是,我关于如何显示配置表的问题仍然存在。

第一件事:确保在项目中包含
ScreenSaver.framework
;它提供了必要的类
ScreenSaverView
ScreenSaverDefaults

您说您已经有一个名为
ScreenSaverView.m
的文件。再加上您还说,为了禁用“屏幕保护程序选项…”按钮,您必须导出
-hasConfigureSheet
方法。这让我想知道您是否已经像您应该做的那样对
ScreenSaverView
进行了子类化。(您是否改为子类化了
NSObject
ScreenSaverView
为您导出了
-hasConfigureSheet
等方法。您应该将其子类化,并重写其中的适当方法

还有几件事:

您应该在项目中包含一个包含配置表UI的xib文件,并且应该在子类的界面中提供
IBOutlet
s,以引用面板及其包含的UI元素(即您实际需要插座的那些元素)

最后,您的-configureSheet方法应该以类似的方式获取配置表(在本例中,
configSheet
将是您的
IBOutlet
s之一):

编辑:

如果我要告诉你一些你已经知道的事情,但你确实说你在
configSheet
中遇到了困难,那么请提前道歉,因此我只是简单介绍一下所有的基本情况

在My_ScreensaverView.h
中,为您的面板声明一个插座:

IBOutlet id configSheet;
请注意,我使用了
id
而不是
NSWindow*
NSPanel*
,这仅仅是因为我不知道该工作表实际使用的是什么类。(理想情况下,板材应使用NSPanel。)

在nib文件中,确保
文件的所有者
我的屏幕保护视图
的实例。您可以通过选择此对象的图标,然后使用标识检查器指定类来确定这一点

configSheet
插座和面板之间进行连接。一种方法是按住Control键,同时从
文件的所有者
对象拖动到窗口或面板图标,然后从出现的弹出窗口中选择
configSheet


一如既往,祝你在努力中好运。

我的项目中确实有
ScreenSaver.framework
,我正在用
my_ScreenSaverView
ScreenSaverView
进行子类化。很抱歉给你带来了困惑。我想我的问题是不知道如何将
my_ScreensaverView.h
中的
configSheet
连接到
.xib
文件。我不知道该告诉你什么。我的代码几乎与您一直发布的代码相同,但我不知道如何将
IBOutlet id configSheet
链接到
.xib
文件本身。我相信人们通常会按ctrl键单击
.xib
中的元素,并将其拖动到头文件中的
IBOutlet id configSheet
,但它对我不起作用。这有意义吗?你能让它在Xcode 4中为你工作吗?@ConstableJoe我知道你想做什么,但这不是办法。控制从表示My_ScreensaverView的对象图标(标识为“文件所有者”)到表示面板的对象图标的拖动。应出现一个上下文菜单,列出
configSheet
。从菜单中选择
configSheet
,您应该可以开始了。@ConstableJoe在用户界面布局的左侧有一行垂直的图标。这就是我提到的图标所在的地方。谢谢你忍受我的困惑!我看到了对象图标,但ctrl从“文件的所有者”拖动到面板对象图标对我没有任何帮助。唯一的ctrl拖动功能似乎是从“应用程序”拖动到“面板”,这将打开一个显示“Outlets”和“Delegate”的菜单
IBOutlet id configSheet;