好的,所以我有一个名为“AmazingClass”的类,用于生成工作表以保存文件。其中有一个带有额外选项的NSView。它运行良好,但现在我想拥有更多具有相同能力的窗口,但使用不同的选项,因为它们应该保存不同的文件格式。
基本布局是这样的:
AmazingClass.h
#import <Cocoa/Cocoa.h>
@interface AmazingClass : NSObject {
NSView * _accessoryView;
BOOL _prepared;
}
@property (assign, nonatomic) IBOutlet NSView * accessoryView;
@property (copy, nonatomic) NSString * nibForAcessoryView;
// Methods that generate the save window
- (void) prepareToRun;
@end
AmazingClass.m
#import "AmazingClass.h"
@implementation AmazingClass
@synthesize accessoryView = _accessoryView;
@synthesize nibForAcessoryView;
// Other stuff here
- (void) prepareToRun {
// stuff here
if ([self nibForAcessoryView] == nil) {
[self setNibForAcessoryView: @"AmazingWindow"];
}
[NSBundle loadNibNamed:[self nibForAcessoryView] owner:self];
_prepared = YES;
}
现在我想使用同一个类来处理不同的NSView,如下所示:
NotSoAmazing.h
#import "AmazingClass.h"
@interface NotSoAmazing : AmazingClass {
IBOutlet NSView * subAccessoryView;
}
@end
NotSoAmazing.m
#import "NotSoAmazing.h"
@implementation NotSoAmazing
- (void) prepareToRun {
[self setAccessoryView:subAccessoryView];
[self setNibForAcessoryView: @"NotSoAmazingWindow"];
[super prepareToRun];
}
然后我创建一个新的NSView,File的所有者设置为“NotSoAmazing”类,我在界面中创建所有链接并执行代码。
如果有一个链接到原始类的接口,我使用原始接口而不是替代接口。如果我删除所有链接,则不显示任何内容。
因此,我的问题是:如何处理子类中的IBoutlet以采用不同的视图?
答案 0 :(得分:1)
子类具有出口就像它们的父类一样没有问题。在这种情况下,AmazingView
有一个出口accessoryView
,NotSoAmazing
有两个:accessoryView
和subAccessoryView
。
我不清楚您是否希望NotSoAmazing
从accessoryView
所在的同一个笔尖加载AmazingView
,或者是否要将其连接到{{{}}中的其他视图1}}的笔尖。考虑到你在NotSoAmazing
中调用-setNibForAccessoryView:
并将其设置为不同的nib文件,我猜测后者。另外,如果您要从笔尖加载NotSoAmazing
(或者,如果不是,为什么这是一个出口?),我看不到调用[self setAccessoryView:subAccessoryView]
的逻辑。 / p>
看起来你走在正确的轨道上,但你需要确定你想要发生什么。是否要从同一个笔尖或两个不同的笔尖加载两个视图?