シンプルなNavigationBarを備えたビュー/コントローラー(.XIBと共に)があります。NavigationBarには、BarButtonItemを持つNavigationItemがあります。IBを使用してmenuTappedイベントをファイル所有者に接続し、イベントを受信できます。ここまでは順調ですね。
別のプロジェクトでは、iOS 5.0コントローラーの包含を使用して、ネストされたコントローラーを実験しています。上記のビュー/コントローラー(「MainTableViewController」と呼びます)をMainViewControllerにネストすると、menuTappedイベントを受信しなくなります。MainTableViewControllerをメインビューにすると、イベントが発生することを確認しました。しかし、MainViewControllerの下にネストすると、イベントはMainTableViewControllerによって処理されません。
サブビュー/コントローラーを作成する必要があるコードは次のとおりです(これはMainViewController viewDidLoadで実行しています)。
- (void)viewDidLoad
{
self.mainTableViewController = [[MainTableViewController alloc] init];
//[self.mainTableViewController.view setUserInteractionEnabled:YES];
[self addChildViewController:self.mainTableViewController];
[self.mainTableViewController didMoveToParentViewController:self];
[super viewDidLoad];
CGRect frame = self.view.frame;
self.mainTableViewController.view.frame = frame;
[self.view addSubview:self.mainTableViewController.view];
}
これが、サブビュー/コントローラーを初期化するために使用するコードです。
アプリを実行すると、XIBが読み込まれ、UIは正常に表示されます(フレームを他の座標に設定して実験できますが、正常に表示されます)が、BarButtonItemをタップしても、ハンドラーが呼び出されません。
私の理解では、サブビューは親ビューの前にイベントを取得する必要があるため、ビューを誤って接続したに違いありません。iOS SDKドキュメントのコントローラー包含サンプルに従ったので、何が間違っているのかわかりません。
助けてくれてありがとう。