1

インターフェイス ビルダーで「YLJTestViewController」という名前の ViewController を作成します。コードは次のようになります。

-(IBAction)DoneButtonPressed:(id)sender
{
    YLJTestViewController *testViewController = [[YLJTestViewController alloc]initWithNibName:@"YLJTestViewController" bundle:nil];
    [self.navigationController pushViewController:testViewController animated:YES];
    //[self.view addSubview:testViewController.view];
}

使っ[self.view addSubview:textViewController.view];てみるとクラッシュしましたが、使っ[self.navigationController pushViewController:testViewController animated:YES];てみると問題なく動くので、何が違うのでしょうか?同じだと思っていました...

4

5 に答える 5

3

pushViewController一枚の紙を重ねた紙の上に追加するようなものでありaddSubView、一枚の紙を別の紙の上に接着するようなものです.

以前のビューと、プッシュされたビュー コントローラーの新しいビューとの間に明示的な関係はありません (紙片がまだスタック内で分離されているように)。親ビューはそのサブビューへの強力な参照を保持しますが (接着剤のように)。

于 2012-06-18T13:14:31.827 に答える
2

-addSubview:UIViewのメソッドです。ビューを別のビューに挿入します。ページにボタンを追加するようなものです。

-pushViewController:UINavigationController のメソッドです。ビュー コントローラーをナビゲーション スタックにプッシュします。テーブル ビューから詳細ビューにスライドするようなものです。

つまり、-addSubview:ビューを構成します。-pushViewController:ビュー間の遷移です。

于 2012-06-18T13:11:39.267 に答える
1

sptrakesh がこの Apple サポート フォーラム スレッドで述べているように:

addSubview は下位レベルの機能で、親/メイン ビューに追加のビューを追加するために使用します。pushViewController は、ウィンドウ内の現在のメイン ビューを、新しいビュー コントローラーに関連付けられたビューに置き換えます。現在のビューの上にビューをモーダルに表示する (前のビューをブロックする) 場合は、presentModalViewController を使用します。モーダル ビュー コントローラーにフル スクリーンを使用する場合、UI の動作に関しては、pushViewController とこれに大きな違いはありません。pushViewController を使用すると、プッシュされたビュー コントローラの配列内の任意のビュー コントローラに「ポップ」できますが、これはネストされたモーダル ビューでは簡単ではありません。

于 2012-06-18T13:09:45.773 に答える
0

私は最近、 と で同様の問題に遭遇しましaddSubviewpushViewController。ここにいる誰もが素晴らしいコメントをしてくれましたが、1 つ付け加えておきます。

通常addSubview、単独では使用されません。通常は と一緒presentModalViewControllerに使用するか、コントローラーが含まれている場合は を使用しaddChildViewControllerます。

要約すると:

  1. ナビゲーション コントローラーを使用している場合は、p ushViewController/popViewControllerを使用してアプリ内を移動します。
  2. ビューを手動で切り替える場合は、 を使用しますpresentModalViewController
  3. コントローラーの封じ込めを行う場合は、 を使用しますaddChildViewController
  4. ストーリー ボードを使用している場合は、セグエを使用します。
于 2012-10-01T11:48:45.950 に答える
0

あなたの場合、問題はaddSubview:vs.の使用ではなく、使用pushViewController:animated:時の単なるタイプミスですaddSubview:

[self.view addSubview:textViewController.view]; // misspelled

あるべきです (x を s に置き換えます)

[self.view addSubview:testViewController.view]; // correct

addSubview:vs.の違いについてはpushViewController:animated:、他の人がすでに良い答えを出しています。基本的に、全pushViewController:animated:画面のコンテンツを置き換えるとき、およびaddSubview:全画面以外の UI 要素を既存のビューに追加するときに使用する必要があります。

のビューについて話しているときは、 をUIViewController優先するpushViewController:animated:方法にする必要があります。

于 2012-06-18T13:16:19.687 に答える