2

iPadアプリで、自分のビューの1つをモーダルフォームシートスタイルで表示しようとしています。ここにいくつかのコードがあります:

-(void)present
{
    SecondViewController *modal = [[SecondViewController alloc]init];
    modal.modalPresentationStyle = UIModalPresentationStyleFormSheet;
    [self presentModalViewController:modal animated:YES];
}

ストーリーボードを使用していて、表示したいビューにtextViewやツールバーなどを配置しました。Identity Inspectorで適切なクラスを設定し、クラスファイルでそれがパッティングで表示される適切なビューであることを確認しましたNSLog(@"Right view");

ボイドを存在と呼ぶと、ビューが表示されますが、それは濃い白の正方形としてのみ表示されます。ストーリーボードのコンテンツには何も含まれていません。ビューとtextViewの背景色を変更して、正方形のすぐ外側に何かがあるかどうかを確認しましたが、全体が白のままでした。ストーリーボードで作成したビューを使用していないように感じますが、正しいクラスに設定しているため、呼び出すとNSLogが出力されます。ストーリーボードで2つのビューを接続していません。SecondViewControllerが浮かんでいるだけなので、問題が発生する可能性がありますか?必要なボタン-(void)presentはプログラムで作成されているため、Ctrlキーを押しながらボタンにドラッグすることもできません。

クラスの空のバージョンが表示されるのはなぜですか?

4

2 に答える 2

3

「IdentityInspector」で、ViewControllerの「ストーリーボードID」を設定し、次のように表示します。

-(void)present
{
    SecondViewController *modal = [self.storyboard instantiateViewControllerWithIdentifier:@"myStoryboardID"];
    modal.modalPresentationStyle = UIModalPresentationStyleFormSheet;
    [self presentModalViewController:modal animated:YES];
}

また、iOS6を使用している場合presentModalViewController:animated:は非推奨であるため、次を使用してください。

 -(void)present
    {
        SecondViewController *modal = [self.storyboard instantiateViewControllerWithIdentifier:@"myStoryboardID"];
        modal.modalPresentationStyle = UIModalPresentationStyleFormSheet;
        [self presentViewController:modal animated:YES completion:nil];
    }
于 2013-01-08T00:48:07.740 に答える
1

あなたの問題は、ストーリーボードがどのように機能するかではない場合に、プログラムがこのコントローラーのビューを見つける場所を本質的に知っていると想定していることです。リストするコードはビューコントローラーを作成しますが、関連付けられたビューがないと、単に黒い四角として表示されます。

ジレンマを解決する方法はいくつかあります。

  • ビューコントローラにセグエとしてモーダルトランジションを追加します。これが最も簡単な方法であり、iOSストーリーボードで期待されていることです。
  • ビューをストーリーボードから外部に移動し.xib、メソッドを呼び出して、initWithNibName:bundle:これをビューコントローラーのビューとしてロードします。これは、プログラムでビューをロードするだけの場合に最適なソリューションです。
  • このメソッドを使用して、ストーリーボードからプログラムでビューをロードします。ストーリーinstantiateViewControllerWithIdentifier:ボードの設計に反するため、これはおそらく悪い考えです。

必要に応じて、それらについて詳しく説明できます。

于 2013-01-08T00:49:57.437 に答える