1

ビューを呼び出して、次のコードを表示します。

#import "infoView.h"
...
infoView *viewInfo = [[infoView alloc] initWithNibName:nil bundle:nil];
viewInfo.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentModalViewController:viewInfo animated:YES];

ただし、実行時に表示されると、ロードされたビューは黒くなります。現在、ストーリーボードを使用していますが、複数のビューを処理しているため、このコードを使用する必要があります。私の場合は、はるかに効率的です。

StoryBoardを介して接続すると正常に動作します。

2つのラベル、1つのUITextView、および2つのUIButtonが表示されるはずです。

ビューはStoryBoardを使用して作成されましたが、作成されたビューの.mファイルと.hファイルに.xibを追加しませんでした。また、StoryBoardの「カスタムクラス」セクションを介してリンクされています。

ありがとう、誰かが助けてくれることを願っています!

4

1 に答える 1

5

あなたを助けるために時間と労力を費やしている人々をあざけるのは一般的にかなり悪い形です。

ネーミングは、コードの操作を容易にし、他の人が使用できるようにするために重要です。使用している言語の規則に従わないことは危険であり、解釈が異なるため、コードが他の開発者と互換性がないことを意味します。

UIViewControllerのドキュメントinitWithNibName:bundle:を見ると、メソッドの説明にこのメモが表示されます。

アプリがストーリーボードを使用してビューコントローラーとそれに関連するビューを定義する場合、アプリはそのクラスのオブジェクトを直接初期化することはありません。代わりに、ビューコントローラーはストーリーボードによってインスタンス化されます。つまり、セグエがトリガーされたときにiOSによって自動的にインスタンス化されるか、アプリがストーリーボードオブジェクトのinstantiateViewControllerWithIdentifier:メソッドを呼び出したときにプログラムでインスタンス化されます。ストーリーボードからViewControllerをインスタンス化する場合、iOSは代わりにinitWithCoder:メソッドを呼び出して新しいViewControllerを初期化します。iOSは、nibNameプロパティをストーリーボード内に保存されているnibファイルに自動的に設定します。

したがって、コントローラーを間違ってインスタンス化しています。ストーリーボードがコントローラーをインスタンス化する必要があります。これはこのように行われます(名前が修正されました)

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:[NSBundle bundleForClass:[self class]]];
InfoViewController *infoViewController = [storyboard instantiateViewControllerWithIdentifier:@"InfoViewController"];
infoViewController.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self infoViewController animated:YES];

サイドノート

infoView大文字で始めなかっただけでなく、完全にだまされているため、クラスの悪い名前です。これを読んでいる人は誰でも、それがnotInfoViewのサブクラスであると想定します。UIViewUIViewController

于 2012-05-13T23:51:26.750 に答える