カスタム タブ バー コントローラーを、それぞれ独自のビュー コントローラーに関連するボタンのセットとして実装しました。このリンクhttp://idevrecipes.com/2011/01/04/how-does-the-twitter-iphone-app-implement-a-custom-tab-bar/をガイドして、動作を実現しました。したがって、コードの関連部分は次のとおりです。
- (void) selectedItemAtIndex:(NSUInteger)itemIndex
{
// Get the right view controller
NSDictionary* data = [self.tabBarItems objectAtIndex:itemIndex];
UIViewController* viewController = [data objectForKey:@"viewController"];
// Remove the current view controller's view
UIView* currentView = [self.view viewWithTag:SELECTED_VIEW_CONTROLLER_TAG];
[currentView removeFromSuperview];
// Set the view controller's frame to account for the tab bar (+ 48)
viewController.view.frame = CGRectMake(0,48,self.view.bounds.size.width, self.view.bounds.size.height - 48);
// Se the tag so we can find it later
viewController.view.tag = SELECTED_VIEW_CONTROLLER_TAG;
// Add the new view controller's view
[self.view insertSubview:viewController.view belowSubview:self.tabBar];
//Keep track of current view controller
self.currentController = viewController;
}
これまでのところ動作しており、デフォルトの TabBarViewController と同様の方法で各ビュー コントローラーを確認できます。しかし、新しいナビゲーション コントローラーをモーダルにプッシュする必要があるという要件があります (すべてのアプリケーション フレームを取得する必要があります)。
一見したところ、タブ コントローラーの 1 つから次のコードを試してみました。
DetailViewController *detailViewController = [[DetailViewController alloc]init];
UINavigationController *navigationController = [[UINavigationController alloc]detailViewController];
[self presentModalViewController:navigationController animated:YES];
ただし、期待どおりに機能していません。最初にビューがタブバーの下に表示され、次に新しいビューが親ビュー フレームを考慮していません。(0、48、360、412)。私の詳細View Controllerは、nibファイルからコンテンツをロードしています。
TabBar Controller がカスタム TabBar の下に各ビューを挿入しているので、これは明らかです。
[self presentModalViewController:navigationController animated:YES];
そこで、ウィンドウのサブビューとして直接挿入してみました:
[[UIApplication sharedApplication].keyWindow addSubview:navigationController.view];
しかし、これではいけないと思います...私が理解できないより良いアプローチがあるはずです。したがって、このナビゲーション システムを修正または改善する方法について誰かが提案してくれれば、それは素晴らしいことです。
どうもありがとう。