1

あるビューから別のビューに切り替えるときのビューコントローラーの動作を理解しようとしています(異なるビューを表示する)

機能しているように見えるaddSubiewステートメントの一部ですが、2つのステートメントで何が起こるかについての説明が見つかりません。

self.view = someViewController.view; [someViewController loadView];

実際、最初のものだけが機能しているように見えるケース (someViewController 内で定義されたビューが表示される) と、別のケースでは 2 番目のものだけが表示されます。

より正確には、ルートの viewController.view から anotherViewController.view (既にインスタンス化されている) まで、最初のものを使用する必要があり、戻ってくるには 2 番目のものを使用する必要があります。どちらか一方のステートメントが機能する現在の状況の違いが何であるか理解できません。

ありがとうございました

4

2 に答える 2

3

あなたの質問を理解することさえ非常に難しいです。しかし、私はそれに答えようとします:

iPhone OS はビューのスタックを使用し、最初のビューをユーザーに表示します。ビューをこのスタックにポップ (削除) またはプッシュ (追加) します。

あなたが提供したコードはやや「あいまい」です。コントロールを得る最善の方法は、サブビューをウィンドウまたはその他のビューに追加することです

すなわち[window addSubview:viewController.view];

を使用して現在のビューをオーバーライドしないでくださいself.view = someViewController.view。代わりに、新しい ViewController を初期化し、そのビューを現在のビューのサブビューに追加します。

質問は?コメントするだけです。

于 2010-01-09T16:05:39.860 に答える
2

ビューコントローラーの仕組みについて誤解しているようです。

これらの 2 つのステートメントには、次の 2 つの問題があります。

self.view = someViewController.view;

UIViewController.view のドキュメントによると:

「各ビュー コントローラー オブジェクトは、そのビューの唯一の所有者です。同じビュー オブジェクトを複数のビュー コントローラー オブジェクトに関連付けてはなりません。」-Apple ドキュメント

そのコード行が実行されると、ビューには 2 つの異なるコントローラーが含まれますが、これは問題です。

次の行:

[someViewController loadView];

loadView を明示的に呼び出すべきではないため、これは悪いことです。

UIViewController.loadView のドキュメントから:

「このメソッドを直接呼び出すべきではありません。」

UIViewController.view のドキュメントから:

"このプロパティにアクセスし、その値が現在 nil の場合、View Controller は自動的に loadView メソッドを呼び出し、結果のビューを返します。"

「View Controller Programming Guide for iPhone OS」など、viewController のチュートリアルとガイドを参照してください。彼らは優れたドキュメントであり、多くのことを教えることができます。

于 2010-01-09T16:29:07.473 に答える