2

私はUIViewController内部を提示しようとしていUIPopoverControllerます。私はInterfaceBuilderでViewControllerを設計し、それにカスタムクラス(たとえばMyAppTestViewController)を与え、次のようにポップオーバーを作成しようとしています。

MyAppTestViewController *fxViewController = [MyAppTestViewController new];

self.fxPopover = [[UIPopoverController alloc] initWithContentViewController:fxViewController];
self.fxPopover.popoverContentSize = CGSizeMake(1024, 120);

[self.fxPopover presentPopoverFromBarButtonItem:_fxButton permittedArrowDirections:UIPopoverArrowDirectionDown animated:NO];

ボタンを押すと、ポップオーバーが正しい場所に正しいサイズで表示されますが、空です。MyAppTestViewControllerviewDidAppearメソッドが(によって)呼び出されていることを確認しましたNSLogが、Popoverの内部は空です:

iPadのスクリーンショット

私は何かが足りないのですか?

4

2 に答える 2

2

コメントで絵コンテを使っているとおっしゃっていましたね。だからあなたにポップオーバーセグエを使ってみませんMyAppTestViewControllerか?セグエをツールバーの[効果]ボタンに直接配線することができます。(または、現在のView Controllerから呼び出します。)ストーリーボードの右側にperformSegueWithIdentifier:UILabelをスローして、正しく表示されるかどうかを確認するだけで、簡単なテストを行うことができます。MyAppTestViewController

ここに画像の説明を入力してください

于 2012-10-28T20:47:26.760 に答える
1

問題はここにあると思います:

MyAppTestViewController *fxViewController = [MyAppTestViewController new];

通常は使用[[MyViewControllerClass alloc] initWithNibName:nil bundle:nil]します(名前が一致するxibファイルがあると仮定します)。で初期化されたViewControllerを見たことがないと思いますnew。Objective-Cのすべてがalloc-initです。

Appleドキュメント:UIViewControllerクラスリファレンス

引用:

nibを使用してViewControllerオブジェクトを初期化するには、initWithNibName:bundle:メソッドを使用して、ViewControllerが使用するnibファイルを指定します。次に、View Controllerがビューをロードする必要がある場合、nibファイルに格納されている情報を使用してビューを自動的に作成および構成します。


編集:

魅力的です、大丈夫です。新しいキーワードの使用については正しいようです。これについて少し説明します

結構です、それは問題ではありません。viewDidAppearメソッドを中断し、デバッガーを使用してビュープロパティを出力し、フレームを確認し、スーパービューを確認するなどして、問題をよりよく理解しようとしましたか?これを行う方法はすでに知っているかもしれませんが、コマンドは次のようになりますpo self.view

いずれにせよ、私もこれを見つけましが、それはポップオーバープレゼンテーションの仕組みにのみ入り、あなたがダウンしているように見えるコンテンツビューの割り当てには入りません。

于 2012-10-28T01:04:50.047 に答える