0

4 つのタブを含む UITabBarController があります。各タブには、ユーザーが自分の設定ビューを開くことができるナビゲーションバー内のアイコンが必要です。これら 4 つのタブの親クラスを作成することでこれを解決し、viewDidLoad メソッド内にプッシュを実行するメソッドを呼び出すアイコンを追加しました。このソリューションは、これまでのところ期待どおりに機能しました。

しかし :-)!ここで、この設定ビューを 1 回だけ開きたいと思います。私が現在持っている解決策では、ユーザーは 4 つのタブすべてで同時に設定ビューを開くことができます。私はそれを望んでいません - 設定を一度だけ開く方法はありますか?

これが私のコードです(親ファイルに配置されています)

-(void)viewDidLoad
{
    UIBarButtonItem *leftButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCompose target:self action:@selector(showSettings)];
}

- (void)showSettings
{
    [self.navigationController pushViewController:[[SettingsViewController alloc] initWithNibName:@"SettingsViewController" bundle:nil] animated:YES];
}

何かアドバイス?

4

2 に答える 2

1

すべてのタブが であると仮定すると、他のタブUINavigationController-showSettings歩いて、ナビゲーション ビュー コントローラーがSettingsViewController.

- (void)showSettings
{
    for (UINavigationController *navController in self.tabBarController.viewControllers)
        if ([navController.viewControllers.lastObject isKindOfClass:[SettingsViewController class]])
             [navController popViewControllerAnimated:NO];
    [self.navigationController pushViewController:[[SettingsViewController alloc] initWithNibName:@"SettingsViewController" bundle:nil] animated:YES];
}
于 2012-08-21T11:40:47.213 に答える
0

私の理解が正しければ、タブごとに 4 つの UINavigationControllers があり、それらがプッシュする各 rootViews のナビゲーション バーにこのアイコンがありますよね? その場合、ユーザーが設定ビューに移動したら、各 UINavigationController にメッセージを送信して、UINavigationBar から設定 UIBarButtonItem を削除するように指示する必要があります。

UINavigationController は、View Controller が使用するすべての UINavigationItems を「所有」していないため、現在持っているすべての View Controller にメッセージを送信し、ボタンを削除する必要があることを伝える必要があります。

設定ビューを表示するときにこれを行うことができるため、ユーザーがメイン ビューに戻ったときにボタンがなくなり、他のすべてのビュー コントローラーからも消えます。

于 2012-08-21T11:36:44.623 に答える