7

UITabBar.viewControllers 配列で UINavigationControllers の 1 つを選択しようとしています。

以前に UITabbarController.selectedIndex を設定して試してみましたが、Apple のドキュメントには次のように書かれています。 「More ナビゲーション コントローラー自体を選択するには、代わりに selectedViewController プロパティの値を変更する必要があります。」

AppDelegate *appDelegate = (AppDelegate*)[UIApplication sharedApplication].delegate;
UINavigationController *navController = [appDelegate.objTabBarController.viewControllers objectAtIndex:5];
[appDelegate.objTabBarController setSelectedViewController:navController];

そうすることは問題ありませんが、MoreViewController のリスト ビューに戻すと、左側のアイコンが表示されなくなり、元に戻りません。

指で選択すると、すべて問題ありません。

選択は問題ありません

プログラムで選択するときのバグ -> 画像が消える

コードごとの手順 1 コードごとの手順 2 コードごとの手順 3

私が間違っていることは何か提案はありますか?

よろしく、スティーブ

4

3 に答える 3

0

プログラムで MoreViewController 内の View コントローラーを選択したいという、非常によく似た状況に遭遇しました。

質問で言ったように、アップルは MoreViewController 内にある (またはタブバーに表示されない) ビュー コントローラーを選択することを許可していません。

私の場合、タブバーでタブを並べ替えるデフォルトの「その他」機能は必要ありません。

だから、私は次のことをしました

  1. 5 番目のタブとして UITableViewControlelr を作成し、そのタイトルを more とカスタム イメージに設定しました (デフォルトの more image に似ています)。

  2. 私の UITableViewController では、ViewControllers に対応するアイテムをリストしました。それぞれのView Controllerを表示するをタップします。

  3. プログラムで UITableViewController 内にあるビュー コントローラーを表示する必要がある場合は、フラグを設定して UITableViewController をプッシュし、UITableViewController の viewDidAppear メソッドで目的のビュー コントローラーをプッシュします。

  4. これにより、プログラムで開いたビューの戻るボタンが MoreViewController のリストに表示されます

于 2013-04-25T05:19:12.113 に答える
0

私はこの同じ問題に遭遇しました。ナビゲーション コントローラーが何らかの形でビュー コントローラーを見失っていたようです。私の場合、画像が消えていたナビゲーション コントローラーは、tabBarController のインデックス 7 にありました。ナビゲーション コントローラには、SettingsViewController クラスの viewController が含まれているはずでした。しかし、時々それはそれを失いました。

これを修正するには、アプリ デリゲートと SettingsViewController の 2 つのクラスにコードを追加する必要がありました。アプリのデリゲートで:

-(void) fixSettingsNavigationController {
    UITabBarController* tab = self.tabBarController;
    NSArray* vcs = tab.viewControllers;
    NSInteger nVCs = vcs.count;
    if (nVCs > 7) {
        UIViewController* settingsContainer = vcs[7];
        UINavigationController* settingsContainerNav = (UINavigationController*)settingsContainer;
        if ([settingsContainerNav isKindOfClass: [UINavigationController class]]) {
            NSArray* settingsNavVCs = settingsContainerNav.viewControllers;
            NSInteger count = settingsNavVCs.count;
            SettingsViewController* svc = self.settingsViewController;
            if (!count) {
                  //  The container navigation controller has lost track of the settings view controller.
                  settingsContainerNav.viewControllers = [NSArray arrayWithObject:svc];
            }
        }
    }
}

そして SettingsViewController で:

-(void) viewWillDisappear:(BOOL)animated {
    MyAppDelegate* appDel = [[UIApplication sharedApplication] delegate];
    [appDel fixSettingsNavigationController];
    [super viewWillDisappear: animated];
}
于 2013-01-13T17:18:21.787 に答える