2

私は Objective C のコーディングに慣れていないので、MVC の概念に少し苦労しています。私の目標は、Mac アプリケーションを開発することです。メイン ウィンドウ用の .xib を作成できました。それはうまく始まります。私のメインの NSWindow にはメインの NSView があります。この NSView に、3 つのサブビューを配置しました (Interface Builder を使用)。私が望むのは、最初のサブビューに配置されたボタンをクリックしたときに、2 番目のサブビューのコンテンツを (SubWindow1.xib という別の XIB ファイルからコンテンツをロードすることによって) 変更することです。

クリックをキャッチして、いくつかの「xib ロード」コードを試してみましたが、機能しません (コンテンツが 2 番目のサブビューに表示されません)。

私がしたことは次のとおりです。

  • NSButton を配置します (最初のサブビューに)
  • NSObject を Interface Builder に配置します (クラスは CtMainWindow に名前が変更され、コントローラーの場合は「Ct」)
  • IBAction (changeToSubWindow1) と IBOutlet (私の 2 番目のサブビューである vSubView2) をリンクします。
  • CtMainWindow クラスを作成し、VwSubWindow1 クラス (NSView を拡張) を作成します。

changeToSubWindow1() で、次のように書きました。

VwSubWindow1 * vProfile = [[VwSubWindow1 alloc] initWithFrame:vSubView2.bounds];
[vProfile loadXib];
[vProfile.superview addSubview:vProfile];

loadXib() 関数は次のことを行います。

NSNib * nib = [[NSNib alloc] initWithNibNamed:[self @"SubWindow1"] bundle:nil];  //@"SubWindow1" is the name of the expected loaded xib without .xib extention
[nib instantiateWithOwner:self topLevelObjects:nil];

そして出来上がり。サブxibをビューにロードし、そのビューを2番目のサブビューに配置すると、表示されることを望んでいました。

また、changeToSubWindow1() に次のコードだけを入れてみました。

VwSubWindow1 * vProfile = [[VwSubWindow1 alloc] initWithFrame:vSubView2.bounds];
[vProfile loadSubWindow];

loadSubWindow() 関数は次のことを行います。

[NSBundle loadNibNamed:@"SubWindow1" owner:self];

これ以上成功せずに。

私はすでにstackoverflowから多くのスレッドを読み、多くの解決策を試しましたが、どれもうまくいきませんでした.

サブビューで Xib を読み込んで表示するために必要なヒントを誰か教えてもらえますか?

前もって感謝します。

4

1 に答える 1

0

この方法を試すことができます

3 つの xib ファイルと 3 つのウィンドウを配置できます。各ウィンドウを接続する

self.packages = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
[self.window1.contentView addSubview:self.vc.view];
self.packages.view.frame = ((NSView*)self.window1.contentView).bounds;
[window1 makeKeyAndOrderFront:NSApp];
于 2014-09-08T01:24:07.630 に答える