0

シンプルな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ドキュメントのコントローラー包含サンプルに従ったので、何が間違っているのかわかりません。

助けてくれてありがとう。

4

1 に答える 1

0

私は問題を解決しました - init の代わりに initWithNibName を使用する必要があります。init が nib を自動的にロードすることをどこかで読みました (UI が正しくロードされるためです)が、initWithNibName を使用しない限り、アウトレットが接続されていないようです。

于 2012-04-22T10:03:35.433 に答える