如何将自定义NSWindow子类转换为自定义NSPanel?

时间:2013-09-17 06:42:10

标签: objective-c macos inheritance osx-lion nswindow

我正在使用一个名为MyWindow的非常复杂的NSWindow自定义子类。现在我想创建一个名为MyPanel的新类,它具有与NSPanel相同的行为,但它继承自MyWindow作为它的超类。我已经阅读了NSPanel的{​​{3}},但没有说明如何从自定义的NSWindow子类创建一个面板。我目前的代码:

MyPanel.h

#import "MyWindow.h"

@interface MyPanel : MyWindow

- (BOOL)isFloatingPanel;
- (void)setFloatingPanel:(BOOL)flag;
- (BOOL)becomesKeyOnlyIfNeeded;
- (void)setBecomesKeyOnlyIfNeeded:(BOOL)flag;
- (BOOL)worksWhenModal;
- (void)setWorksWhenModal:(BOOL)flag;

@end

MyPanel.m

#import "MyPanel.h"

@implementation MyPanel

@end

那么现在如何在不直接子类化NSPanel的情况下完成此操作(这意味着我必须将MyWindow中的所有代码复制并粘贴到MyPanel)?我有什么方法,代理,属性来重新创建/实现以获得与NSPanel相同的行为?

1 个答案:

答案 0 :(得分:1)

听起来你已经自己回答了这个问题。 NSPanel是NSWindow的子类,因此您应该将NSPanel子类化,而不是子类化NSWindow。这就是说..如果你小心,你可以创建一个NSPanel并以编程方式将其超类更改为MyWindow的实例。