3

主に Interface Builder を使用して、サブビューに応じたタブ バーを作成するこのUITabBarController チュートリアルに従いました。そこに UITabBarController が作成され、タブのビュー コントローラーもそこに追加されます。

UIViewControllers {WelcomeViewController|AboutViewController}.{h|m} を作成する必要はありませんか?

サブビュー {WelcomeViewController|AboutViewController}.xibの実際のファイルの所有者は誰ですか?

最初に、WelcomeViewController.h で IBAction メソッドを作成しようとしたことに注意してください。Interface Builder の WelcomeViewController.xib で、ファイルの所有者に表示されるアクションにボタンの押下を接続できました。しかし、実際のファイルの所有者はおそらくWelcomeViewController.m のオブジェクトではないため、実行時にクラッシュしました。私はここにいますか?IBAction が Interface Builder (ここでは Xcode 4) に表示されるのはバグですか?

最後の質問: チュートリアルのように Interface Builder ですべてを接続するときに、コードを分離するにはどうすればよいですか (このサブビューでのみ発生するアクションのために WelcomeViewController.h に IBActions を含める)。

4

1 に答える 1

3

UIViewControllers {WelcomeViewController|AboutViewController}.{h|m} を作成する必要はありませんか?

いいえ、ビュー階層を管理するには、フルスクリーン ウィンドウごとに少なくとも 1 つの ViewController が (最適には最大でも) 存在する必要があるため、両方のコントローラーが必要です。TabBarController は、ロードするサブコントローラーの表示を管理する一種の「ダム」メタコントローラーにすぎません。したがって、切り替えられるビューにはコントローラーが必要です。Apple doc のこの部分を読むことをお勧めします。

サブビュー {WelcomeViewController|AboutViewController}.xib の実際のファイルの所有者は誰ですか?

ファイルの所有者は、対応するコントローラー クラス (この場合、{WelcomeViewController|AboutViewController}.{h|m}) である必要があります。ファイルの所有者が選択されている場合、インスペクター パレットの Interface Builder でクラスを設定できます。アプリケーションの開始時に開かれる最初のウィンドウ (通常は Main.xib などと呼ばれる) のみが、アプリケーションのデリゲートをファイルの所有者として持つ必要があります。ファイルの所有者は XIB/NIB ファイルのオブジェクトを所有します - オブジェクト参照に関しては、あなたは私が何を意味するか知っています :) XIB/NIB ファイルを他のコントローラーでロードすることも可能であるべきだと思います (そして、他のコントローラーは自動的にファイルの所有者)ですが、よくわかりません。

... 私はここにいますか?IBAction が Interface Builder (ここでは Xcode 4) に表示されるのはバグですか?

Interface Builder でアクションを間違った方法で配線した可能性がありますが、これはよくある間違いです。Ctrl キーを押しながら、ボタンからファイルの所有者に線をドラッグして、リンク先の方法を選択します。それはそれを行う必要があります。

最後の質問: チュートリアルのように Interface Builder ですべてを接続するときに、コードを分離するにはどうすればよいですか (このサブビューでのみ発生するアクションのために WelcomeViewController.h に IBActions を含める)。

最初の段落でこれに答えたと思います-WelcomeViewControllerはまだそこにあり、IBOutletsを作成してIBに接続するだけです。もちろん、メンバーの「ビュー」は (ファイルの所有者接続を介して) 自動的に入力され、そこからすべてのサブビューにアクセスできるため、ワイヤリングをプログラムで行うこともできます。

于 2011-08-19T23:36:51.817 に答える