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