プログラムでxibからUIViewControllerをインスタンス化し、それを子VCとして既存のメインビューに追加してから、子VCのビュー(ボタンを含む)をメインビューに追加します。ボタン付きのビューは問題なく表示されますが、ボタンを押すと、「認識されないセレクター」というメッセージが表示されてアプリがクラッシュします。
UIViewControllerのカスタムサブクラスを作成してXIBを作成しました(ファイル-新規-Cocoa Touchクラス、UIViewControllerのサブクラスを選択し、XcodeにXIBファイルも生成するように依頼します)。次に、そのXIBにボタンを配置し、新しく作成されたUIViewControllerサブクラスに接続しました。XIBファイルの所有者は新しいクラスの名前に設定されます。
したがって、ButtonPushedアクションメッセージがカスタムUIVCに送信されず、代わりに汎用UIViewControllerに送信されるように見えます。これはButtonPushedメッセージを正しく理解していません。
ボタンが押されたときに送信されたアクションメッセージが実際にカスタムUIViewControllerに送信されることを確認するにはどうすればよいですか?
これは、メインビューのawakeFromNibメソッドのコードです(メインビューはMain.storyboardからのものです)。
UIViewController *vc2 = [[UIViewController alloc] initWithNibName:@"ButtonVC" bundle:nil];
vc2.view.frame = CGRectMake(90, 140, 50, 200); //dont obscure the main view completely.
[self addChildViewController:vc2];
[self.view addSubview:vc2.view]; //vc2.view has a button, which shows up fine
[vc2 didMoveToParentViewController:self];
ボタンだけでストーリーボードを作成し、それをプログラムでロードしてから、buttonViewControllerをインスタンス化し、それとそのビューを子VCとしてメインビューに追加することで、同等の機能を得ることができました。それは問題なく機能しますが、XIBだけでこれを達成できるはずだと私には思えます。
これを試して:
UIViewController *vc2 = [[ButtonVC alloc] initWithNibName:@"ButtonVC" bundle:nil];
また、View Controllerのxibのクラスが適切に設定されていることを確認してください(ここで私の答えを参照してください)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加