最初由 Dave Batton 创建。
创建应用程序首选项窗口并不困难。只需创建一个 NSWindowController,设置工具栏,创建一个 nib 文件,包含一系列自定义视图,或者使用 NSTabView 对象。问题是,仅设置工具栏和视图交换机制就需要很多代码,这对于每个应用程序基本上都是相同的。这听起来是创建一个新类的好机会。
DBPrefsWindowController 的目标是减少创建首选项标签的冗余,每个工具栏图标只需一行代码。这是通过名为 DBPrefsWindowController 的 NSWindowController 子类实现的。
如果您熟悉子类化以及与 Interface Builder 一起工作,您将能够从包含的示例项目中找出如何使用它。基本上,您只需子类化它并将您的 .h 文件连接到自定义视图的 nib 文件。nib 文件应命名为 Preferences。然后只需调用 -addView:label:
以指定要显示的视图以及要使用的标签
- (void)setupToolbar
{
[self addView:generalPreferenceView label:@"General"];
[self addView:colorsPreferenceView label:@"Colors"];
[self addView:playbackPreferenceView label:@"Playback"];
[self addView:updatePreferenceView label:@"Update"];
[self addView:advancedPreferenceView label:@"Advanced"];
}
以这种方式设置后,DBPrefsWindowController 将寻找与提供的标签名称匹配的名称的图像文件。如果您的应用程序已本地化,您可以通过调用 -addView:label:image:
来指定用于工具栏图标的图像。
这就是全部内容。如果您已经有了包含首选项窗口专用独立视图的 nib 文件,则可以直接使用它,而不是创建一个全新的 nib 文件。您可以重命名 nib 文件为 Preferences,或者覆盖 +nibName 类方法以使其返回现有 nib 文件的名称。
DBPrefsWindowController 类旨在为在其中使用的每个应用程序进行子类化。子类应设置为 nib 文件“Preferences”的文件所有者。子类应有 NSView 实例,这些实例通过 IBOutlets 连接到 nib 文件中的视图。
nib 文件不需要连接到窗口。如果它连接了,则会忽略它,并创建一个新的窗口以显示首选项视图。
+ (DBPrefsWindowController *)sharedPrefsWindowController
此类方法返回 DBPrefsWindowController 类的共享实例。
+ (NSString *)nibName
如果想要使用名称不是 Preferences 的 nib 文件,则应重写此类。
- (void)setupToolbar
使用对 -addView:label:
或 -addView:label:image:
的调用重写此方法以填充工具栏。
- (void)addView:(NSView *)view label:(NSString *)label
从 -setupToolbar
中尽可能多次调用此方法,以向首选项窗口添加新的工具栏图标和自定义视图。应可在应用程序捆绑包中找到一个与标签名称匹配的图像。它将用作工具栏图标。
- (void)addView:(NSView *)view label:(NSString *)label image:(NSImage *)image
如果应用程序已本地化,或者您只想使用与工具栏按钮标签不同的名称的图标时,可以使用此方法替代 -addView:label:
。
- (IBAction)showWindow:(id)sender
调用此方法以显示首选项窗口。例如:[[AppPrefsWindowController sharedPrefsWindowController] showWindow:nil];
- (void)setCrossFade:(BOOL)fade`
调用此方法以启用或禁用视图切换时的渐变效果。默认值为 YES
。
- (void) setShiftSlowsAnimation:(BOOL)slow
调用此方法以启用或禁用在视图切换时使用Shift键减慢动画的默认值。默认值为 YES
。