好的,所以我有一个名为“ 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,该文件的所有者将其设置为类“ NotSoAmazing”,然后在界面中创建所有链接并执行代码。

如果有一个链接到原始类的接口,那么我将使用原始接口而不是替代接口。如果删除所有链接,则不会显示任何内容。

因此,我的问题是:如何在子类中处理IBoutlet以采用不同的观点?

最佳答案

子类具有与父类一样的出口没有问题。在这种情况下,AmazingView有一个插座,accessoryView,而NotSoAmazing有两个插座:accessoryViewsubAccessoryView

我不清楚您是否要NotSoAmazing从与accessoryView相同的笔尖加载其AmazingView,或者是否要将其连接到NotSoAmazing笔尖的其他视图。我猜是后者,因为您要在-setNibForAccessoryView:中调用NotSoAmazing并将其设置为其他nib文件。另外,如果您要从笔尖加载[self setAccessoryView:subAccessoryView],我看不到调用subAccessoryView的逻辑(或者,如果不是,为什么这是插座?)。

看来您走在正确的道路上,但是您需要准确地决定要发生的事情。您要从同一笔尖还是从两个不同的笔尖加载两个视图?

10-08 09:30