13

私は次のことをしようとしています。

2つのタブが入ったタブバーコントローラーがあります。両方のタブは、それぞれにテーブルビューを備えたナビゲーションコントローラーです。

ここで、最初のタブでテーブルの1つのセルを選択すると、別のタブバーコントローラーを押しているので、親タブバーコントローラーのタブバーを非表示にし、ナビゲーションバーの[戻る]ボタンをクリックすると、親タブバービューを表示しているので、親タブバーをもう一度表示します。

押すとhidesbottombarを試しましたが、親タブバーコントローラーのタブバーが非表示になりましたが、クリックしても元に戻りません。

4

6 に答える 6

38

さて、ようやく答えが出ました。これが私がやろうとしていることです。

self.hidesBottomBarWhenPushed = YES;
[self.navigationController pushViewController:aViewController animated:YES];
self.hidesBottomBarWhenPushed=NO;

したがって、基本的にhidesBottomBarWhenPushed = YESであり、次にView Controllerをプッシュしてから、hidesBottomBarWhenPushed = NO; これは魅力のように機能します。

eddyと彼の投稿に感謝します

于 2011-02-14T04:27:05.387 に答える
5

受け入れられた答えは私にとって問題がありました。

私のアプリには、3つのUIViewControllerの深さのナビゲーションがありました。

  • FirsViewControllerショーのUITabBar。(正しい)
  • FirsViewControllerはSecondViewControllerをプッシュし、SecondViewControllerはUITabBarを表示しません。(正しい)
  • SecondViewControllerはThirdViewControllerをプッシュし、ThirdViewControllerはUITabBarを表示します。(正しくない)
  • ThirdViewControllerがSecondViewControllerにポップされ、SecondViewControllerショーのUITabBarが表示されます。(正しくない)
  • SecondViewControllerがFirstViewControllerにポップされ、FirstViewControllerショーのUITabBarが表示されます。(正しい)

私にとっての解決策は、UINavigationControllerDelegateのデリゲートを設定することでした

迅速:

self.navigationController?.delegate = self

Objective-c:

self.navigationController.delegate = self;

そして、次のデリゲートメソッドを実装します

迅速:

fun navigationController(navigationController: UINavigationController, animationControllerForOperation operation: UINavigationControllerOperation, fromViewController fromVC: UIViewController, toViewController toVC: UIViewController) -> UIViewControllerAnimatedTransitioning? {

    if fromVC.isKindOfClass(FirstViewController) && toVC.isKindOfClass(SecondViewController) {

        self.hidesBottomBarWhenPushed = true;

    }
    else if fromVC.isKindOfClass(SecondViewController) && toVC.isKindOfClass(FirstViewController) {

        self.hidesBottomBarWhenPushed = false;

    }

    return nil

}

Objective-c:

-(id<UIViewControllerAnimatedTransitioning>)navigationController:(UINavigationController *)navigationController
                                 animationControllerForOperation:(UINavigationControllerOperation)operation
                                              fromViewController:(UIViewController*)fromVC
                                                toViewController:(UIViewController*)toVC
{

    if ([fromVC isKindOfClass:[FirstViewController class]] && [fromVC isKindOfClass:[SecondViewController class]]) {

        self.hidesBottomBarWhenPushed = true;

    }
    else if ([fromVC isKindOfClass:[SecondViewController class]] && [fromVC isKindOfClass:[FirstViewController class]]) {

        self.hidesBottomBarWhenPushed = false;

    }

    return nil;

}

お役に立てば幸いです。

于 2015-10-19T10:53:46.123 に答える
1

Appleのドキュメントに記載されているように、NavigationControllerでUITabBarControllerインスタンスをプッシュすることはできません。そして、それには正当な理由があります。タブバーで別のアイテムを選択した場合、プッシュされたタブバーコントローラーからどのように戻るのでしょうか。

簡単な答えは次のとおりです。そうしないでください。ユーザーを混乱させることになります。最初のビューコントローラーをタブバーコントローラーである可能性のある別のビューコントローラーと交換することを試みることができますが、そのためのプッシュパラダイムは使用しないでください。代わりに、最初のタブバーコントローラーを2番目のタブバーコントローラーと交換する明示的なボタンを使用してください。視覚的な遷移。

setAnimationTransition:forView:cache:クラスのドキュメントを見てUIView、たとえばタブバーコントローラーを別のコントローラーに交換する方法を知ることができます。

  1. アニメーションブロックを開始します。
  2. コンテナビューでトランジションを設定します。
  3. コンテナビューからサブビューを削除します。
  4. 新しいサブビューをコンテナビューに追加します。
  5. アニメーションブロックをコミットします。

この場合、コンテナビューがアプリケーションのウィンドウになります。

于 2011-02-13T22:49:10.423 に答える
1

tabBarコントローラーを選択するときに属性インスペクターを使用して非表示にすることもできます

ここに画像の説明を入力してください

于 2013-06-18T22:00:42.370 に答える
0

FirstViewControllerで使用する

self.hidesBottomBarWhenPushed = true

SecondViewControllerで使用する

override func willMoveToParentViewController(parent: UIViewController?) {
  if parent == nil {
    var viewControllers = self.navigationController!.viewControllers
    if ((viewControllers[viewControllers.count - 2]).isKindOfClass(FirstViewController.self)) {
      (viewControllers[viewControllers.count - 2] as! FirstViewController).hidesBottomBarWhenPushed = false
    }
  }
}
于 2016-02-06T14:29:28.157 に答える
0

hidesBottomBarWhenPushed = trueプッシュされるコントローラーに設定します。

入れたすべてのコントローラーを非表示にするprepare for segue

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    segue.destination.hidesBottomBarWhenPushed = true
}
于 2019-08-13T19:01:13.163 に答える