2017-08-23 21 views
1

5つ以上のタブ(正確には8つの子ビューコントローラ)を使用してプログラムでUITabBarControllerを作成します。UITabBarControllerDelegateのメソッドが呼び出されていない

私の目的は、タブを変更するためのカスタムトランジションアニメーションです。私はセットアップUITabbarControllerのデリゲートをし、方法実装:私は送信することで、タブを選択すると

- (nullable id <UIViewControllerAnimatedTransitioning>)tabBarController:(UITabBarController *)tabBarController 
      animationControllerForTransitionFromViewController:(UIViewController *)fromVC 
               toViewController:(UIViewController *)toVC 

を:

[tabbarController setSelectedIndex: 6]; 

デリゲートのメソッドが呼び出されません。私は目に見えるタブのために例えば

[tabbarController setSelectedIndex: 3]; 

、すなわちを送信するときに

は、デリゲートのメソッドが正常に呼び出されました。

さらに1つの発言:現在選択されているビューコントローラが可視範囲0..3にあり、次のビューが可視範囲外0..3デリゲートのメソッドがまだ呼び出されています。現在選択されているビューコントローラが可視範囲0..3から外れており、次のビューが可視範囲0..3から外れている場合でも、デリゲートのメソッドは呼び出されません。私はカスタムトランジションアニメーションを失う。これは私の問題です。

私も

[tabbarController setSelectedViewController: someViewController]; 

代わりの

[tabbarController setSelectedIndex: 6]; 

それは動作しませんを送信しようとしました。 selectedIndexを使用しているとき、彼らはNSNotFoundを返さなければならないという意味 - moreNavigationControllerが画面に表示されていない場合でも、あなたの他のタブは、おそらくmoreNavigationControllerであるよう

+0

タブバーコントローラの 'delegate'プロパティが設定されていますか? – rmaddy

+0

はい。私はセットアップデリゲート。私が[tabbar setSelectedIndex:3]を送信すると、デリゲートのメソッドが正しく呼び出されます。例えば目に見えるタブ用のものである。 – Ragara

+0

いくつのタブがありますか? 6? 0ベースのインデックスなので、うまくいけません(クラッシュします)。 – brandonscript

答えて

0

あなたは、selectedIndexを使用するには、あまりにも多くのタブを持っています。

私はトリッキーなソリューションを作っper iOS Docs

[tabbarController setSelectedViewController: yourIndexSixViewController]; 
+0

アドバイスをいただきありがとうございます!しかし、それは動作しません:( – Ragara

0

、代わりにselectedViewControllerを使用する必要があります。

私は、8つのView Controllerをすべて分離した配列で収集します。それをコントローラと呼んでください。

最初にtabbarController.viewcontrollerersを入力し、最初の5つの項目はコントローラです。さらに2つのシナリオがあります。

  1. ユーザーは範囲0..4インデックスでタブを見たいです。我々はすでに適切なビューコントローラをtabbarController.viewcontrollersに設定しているので、何もしません。
  2. 範囲外のタブを表示したいと考えています。範囲は、0. 0.です。ユーザーは、例えば、インデックス6のタブを見たいと思う。現在選択されているタブには、たとえば、インデックス2があります。この場合、範囲0の数値を選択します。現在選択されているタブインデックスと異なる4です。さらに、私はtabbarController.viewcontrollers [4]コントローラ[6]に置き換えます。その後、私はコントローラ[6]を参照してください結果

    [tabbarController setSelectedIndex: 4]; 
    

を呼び出し、デリゲートのメソッドが正常に呼び出されました。

関連する問題