1

Cocoa フレームワーク (アプリケーションではない) を作成しています。カスタマイズされたNSView;の定義が含まれています。フレームワークは他のアプリケーションにロードされ、カスタマイズされたフレームワークはアプリケーションNSViewの GUI にドラッグされて初期化されます

問題は、フレームワークに XIB ファイルを含めたいということです

(フレームワーク内の) XIB にボタンとラベルを追加したいのですが、フレームワークを使用するアプリケーションのビューにボタンとラベルが表示されません。

XIB のファイルの所有者をNSViewフレームワークのカスタムに設定済みです

他に何をすべきですか?

4

2 に答える 2

1

ビューに nib をロードさせ、ボタン、ラベルなどを nib のビューからそれ自体に移動します。

subviewsペン先のビューを取得し、すべてのペン先に対してこれを行うだけで、これを行うのが最も簡単になります。

あなたの nib が Auto Layout を使用している場合、nib のビューが所有するすべての制約にまたがる必要があると思います。また、そのビューを参照するすべての制約を編集または置換する必要があるかもしれませんペン先のビューの端から X ポイント離れていること)。

新しいビューのフレームを変更したり、サブビューのフレームを (再配置、サイズ変更、またはその両方によって) 変更して、新しいビューに指定されたフレームに一致させるために、追加の作業が必要になる場合もあります。

于 2013-06-11T15:39:35.187 に答える
0

ええ、私は問題を解決しました。詳細が他の人に役立つことを願っています.

フレームワークには、や、NSViewなどの多くのコントロールを含むの複雑なサブクラスがあります。フレームワークには、H ファイル、M ファイル、および XIB ファイルが含まれています。H と M はクラスを定義します。XIB には、クラスが である View オブジェクトがあります。NSSplitView NSOutlineViewIKImageBrowserViewNSPathControlMyViewMyView

アプリケーション側では、ユーザーはNSViewアイテムをアプリのメイン ウィンドウにドラッグし、アウトレットをビューに割り当てる必要があります。たとえばmainViewapplicationDidFinishLaunching「コンシューマー」アプリの機能では、次のコードが必要です

NSBundle *frameworkBundle = [NSBundle bundleForClass:[MyView class]];

NSNib *nibby = [[[NSNib alloc] initWithNibNamed:@"MyView" bundle:frameworkBundle] autorelease];

NSArray *topLevelObjects = nil;

BOOL flag = [nibby instantiateNibWithOwner:nil topLevelObjects:&topLevelObjects];

assert(flag);

for (id topLevelObject in topLevelObjects) {
    if ([topLevelObject isKindOfClass:[MyView class]]) {

        [mainView addSubview: topLevelObject];
        MyView* xView = topLevelObject;
        [xView setFrameSize:mainView.frame.size];
        break;
    }
}

上記のコードでは、XIB ファイルが読み込まれるため、MyViewオブジェクトが初期化されます。次に、XIB から取得し、サイズを変更して、ウィンドウのメイン ビューに追加します。

于 2013-06-11T16:03:47.637 に答える