1

皆さん、こんにちは。

iPhone アプリケーションの一般的な設計上の問題があります。各タブに独自のnavigationControllerがあるタブを使用して、navigationControllerを使用した通常のビューからtabBarControllerに移動する主な原則を知りたいです(最初のnavigationControllerはもう必要ありません)。

これをどのように作成したかをお見せしましょう:

最初に、ナビゲーションコントローラーにボタン付きのビューを追加しました。AppDelegate は、この navigationController (もちろんビュー コントローラーを使用) を subView としてウィンドウに追加します。

[window addSubview:navigationController.view];

その新しいビュー (navigationController が一番上) に到達したら、ボタンをクリックして、tabBarController (彼自身の navControllers) を持つ新しいビューに移動します。

SearchViewController *searchViewController = [[SearchViewController alloc] initWithNibName:@"SearchView_iPhone" bundle:nil];
searchViewController.tabBarItem.title = @"FirstTab";
UINavigationController *searchNavigationController = [[UINavigationController alloc] initWithRootViewController:searchViewController];

SettingsViewController *settingsViewController = [[SettingsViewController alloc] initWithNibName:@"SettingsView_iPhone" bundle:nil];
settingsViewController.tabBarItem.title = @"SecondTab";
UINavigationController *settingsNavigationController = [[UINavigationController alloc] initWithRootViewController:settingsViewController];

//Add navigation controllers to tabBar controller
tabBarController = [[UITabBarController alloc] init];
tabBarController.viewControllers = [NSArray arrayWithObjects:searchNavigationController, dictionariesNavigationController, settingsNavigationController, nil];

OK、すべてのビュー (navControllers を含む) を tabBarController に追加しました。私がしなければならないのは、表示されるように tabBarController をプッシュすることだけです:

[self.navigationController pushViewController:tabBarController animated:YES];

しかしその後、最初のビューの navigationController が tabBars のあるビューにまだ存在することがわかります。これは、navigationController を使用して tabBarController をプッシュしたため、論理的です。だから私はそれを隠すためにこれをしました:

self.navigationController.navigationBarHidden = YES;

今は問題ないようです。すべての tabBar ビューには独自の navController があります。

主な問題: settingsViewController にあるサブビュー テーブル (settingsTableViewCell) から別のビュー (settingsResultsViewController) をプッシュしたい場合、何も起こりません。コードは次のとおりです。

SettingsResultsViewController *settingsResultsViewController = [[SettingsResultsViewController alloc] initWithNibName:@"SettingsResultsView_iPhone" bundle:nil];
[self.navigationController pushViewController:settingsResultsViewController animated:YES];

また、次のように appDelegate を使用してこのビューをプッシュしようとしました。

[delegatePhone.settingsViewController.navigationController pushViewController:settingsResultsViewController animated:YES];
[delegatePhone.firstViewController.navigationController pushViewController:settingsResultsViewController animated:YES];

しかし、再び何も起こりません。

主な問題は、navigationControllers にあると思います。最初のナビゲーションコントローラーはまだ後ろのどこかにありますが、その特定のタブバーで現在のnavControllerをプッシュしたいです。

navigationController 以外の最初のビューから新しいビュー (私の場合は tabBarController) をプッシュする方法はありますか?

私が望むのは、firstView のボタンがクリックされたときに、アプリが tabBarController に移動し、firstView (および最初の navigationController) をまったく忘れることです。もう必要ありません。

私がそれを明確にしたことを願っています。

ご助力いただきありがとうございます。本当に感謝しています。

4

2 に答える 2

0

Tweetieの作者は、しばらく前にタブバーと身廊コントローラーに関するスレッドでコメントしました。このスレッドは役に立ちますか?

ナビゲーションコントローラー内のタブバーコントローラー、またはナビゲーションルートビューの共有

于 2010-07-11T06:21:49.330 に答える
0

presentModalViewController:animated:ナビゲーション スタックにプッシュする代わりに呼び出して、タブ バー コントローラーを表示できます。また、最初のナビゲーション コントローラーがまったく必要ない場合は、おそらく標準のビュー コントローラーに置き換える必要があります。

于 2010-07-10T12:05:57.820 に答える