Cocoa App Preferences(一个 XIB 中的视图?)

Posted

技术标签:

【中文标题】Cocoa App Preferences(一个 XIB 中的视图?)【英文标题】:Cocoa App Preferences (Views in one XIB?) 【发布时间】:2013-10-01 10:24:37 【问题描述】:

我只是想知道,当我创建我的应用偏好时,是否最好将所有视图都放在一个 XIB 中并拥有:

-(id)initWithSelectedToolBarItem: (NSToolBarItem*)toolBarItem
    self = [self initWithNibName: [[toolBarItem label] stringByReplacingOccurrencesOfString:@" " withString:@""] bundle:nil];
    // init code in initWithNibName...
    if (!self) return nil;
        return self;

或者只是走传统路线并有单独的笔尖等......?

我问的原因是因为到目前为止项目越来越庞大(如单独文件的数量),我正试图将其削减一点。

任何建议将不胜感激!

提前干杯:)

【问题讨论】:

【参考方案1】:

我的首选项窗口代码在单个 .xib 中包含每个视图,这些视图使用您的工具栏进行切换,每个 NSView 实例从首选项窗口控制器都有一个出口:

@interface PreferenceController : NSWindowController <NSWindowDelegate, NSToolbarDelegate, FontChooserViewDelegate> 
    // Main window
    IBOutlet NSToolbar *_toolbar;
    IBOutlet NSBox *_box;
    IBOutlet NSButton *_restoreDefaultsButton;
    IBOutlet NSView *_generalPrefsView;
    IBOutlet NSView *_boardPrefsView;
    IBOutlet NSView *_movesPrefsView;

    // Other outlets to individual UI elements on some of the views.

所以我会说“是”,你应该这样做,但是不需要子类化 NSView,因此不需要担心特殊初始化。

编辑实际上,这是一个谎言;其中一个视图是子类的,但使用标准的 NSView 初始化(initWithFrameawakeFromNib)。

【讨论】:

谢谢 :) 我最终做的是编写 NSViewController 的协议子类。这是更多的工作,但现在我已经有了山羊可重用模块,我可以直接放置:) 谢谢或提示 :) @AdrianSluyters 好吧,但为什么要NSViewController 我最后提到的代码是这样的:github.com/heardrwt/RHPreferences 写得很好,给我留下了深刻的印象。对于我需要的东西来说,这有点 OTT,但它几乎一口气回答了我所有的问题 :) 希望它也对其他人有所帮助!

以上是关于Cocoa App Preferences(一个 XIB 中的视图?)的主要内容,如果未能解决你的问题,请参考以下文章

Cocoa:如何在 Mail.app 中绘制插入文本?

Cocoa:从另一个类调用 App Delegate 方法

Cocoa App 窗口有随机焦点

区分 .app/.xcodeproj 和 Cocoa 中的实际文件夹等内容

将 Cocoa 应用程序和命令行工具组合成一个 App Bundle

让 Python 在 Cocoa App 中工作