0

さて、ファイルを保存するためのシートを生成するために使用する「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];
}

次に、ファイルの所有者がクラス「NotSoAmazing」に設定した新しい NSView を作成し、インターフェイスにすべてのリンクを作成してコードを実行します。

元のクラスにリンクするインターフェイスがある場合は、代替インターフェイスの代わりに元のインターフェイスを使用します。すべてのリンクを削除すると、何も表示されません。

したがって、私の質問: 子クラスで IBoutlets を処理して別のビューを採用するにはどうすればよいですか?

4

1 に答える 1

1

親クラスと同じように、サブクラスがアウトレットを持つことに問題はありません。この場合、 にAmazingViewは 1 つのコンセント がありaccessoryView、 とNotSoAmazingの 2 つがaccessoryViewありsubAccessoryViewます。

同じペン先からNotSoAmazingロードしたいのか、それとも のペン先の別のビューに接続したいのか、私にははっきりしません。あなたが呼び出して別のnibファイルに設定していることを考えると、後者だと思います。また、ペン先からをロードする場合の呼び出しのロジックがわかりません(そうでない場合は、なぜそれがアウトレットなのですか?)。accessoryViewAmazingViewNotSoAmazing-setNibForAccessoryView:NotSoAmazing[self setAccessoryView:subAccessoryView]subAccessoryView

正しい方向に進んでいるように見えますが、何をしたいかを正確に決める必要があります。両方のビューを同じ nib からロードしますか、それとも 2 つの異なる nib からロードしますか?

于 2013-05-23T13:21:52.873 に答える