2012-01-15 12 views
4

問題があります。 私のアプリはタブバーコントローラで、最初のビューコントローラは分割ビューコントローラです。 ドキュメントはスプリットボイスコントローラがルートでなければならないと言っているので、これはアップルにとってはうまくいかないと思われるので、おそらくそれが私の問題の原因です。UISplitViewControllerDelegateからwillHideViewControllerが呼び出されない場合があります。

問題はUISplitViewControllerDelegateからwillHideViewControllerが呼び出されないことがあるためです。このため、上/左ボタンが作成されないことがあります。 このエラーを再現するには、これを数回試してください: - ランドスケープモード。 - スプリットビューコントローラタップとは異なるタブを選択します。 - iPadをそのタブのポートレートに移動します。 - Split View Controllerタブに移動し、willHideViewControllerが呼び出されないことがあるので、上のボタンは表示されません。しかし、iPadを横向きにしてから肖像画に回すと修正されます。

私は手動でこの問題を回避するためにいくつかの回転を強制しようとしましたが、運はありません。 私はまだgithubまたはそれに類するものからスプリットビューコントローラのクローンクラスを試す必要があります。 あなたは何が起こっているのか、何か回避しているか考えていますか?

ここでは、正しく動作する2つの例を示します。

enter image description here enter image description here ありがとうございます。

+0

こんにちは、まったく同じ問題を抱えていますが、これでどこにいらっしゃいましたか?私は、必要なのは、すべてのタブでwillShow ... willHide呼び出しを広める方法だと思います。かなり心配しています... – Snips

+0

ここでも同じ問題があり、 'UITabBarController'の中の' UISplitViewController'もあります。私のアプリケーションでは、 'UISplitViewController'の振る舞いは、アプリケーションが起動する方向に依存します。しかし、アプリケーションがポートレートで起動した場合、シナリオは正常に動作し、アプリが横向きに回転しているときに問題が発生します( 'UISplitViewController'は' willShowViewController:invalidatingBarButtonItem: 'delegateメソッドを呼び出しません)。 – herzbube

答えて

0

splitViewControllersデリゲートはどこで設定しますか?おそらく、あなたは、タブをロードするときにデリゲートを設定することができます。あなたは一度回転したときにだけそれを設定するように聞こえる?それ以外の場合は

、彼らはTableViewControllerがsplitviewcontrollerのデリゲートも持っている。ここsee this example

。おそらくあなたはTabBarControllerで同じことをすることができますか?

0

これは私が「十分に」合法であると考える方法ではできないと結論づけました。残念ながら近づくことも可能ですが、各タブの下にある分割ビューコントローラには、willShow ...、will hiddenを配布することの問題が残っています。

作業に最も可能性が高いと思われる解決策がある、

https://github.com/grgcombs/IntelligentSplitViewController/blob/master/IntelligentSplitViewController.m

このコードは間違いなく賢いですが、それは私のために少しも「側のドア」です。私は、デリゲートメソッドを呼び出すだけでは不十分だと思っています(しかしわかりません)。確かに、UISplitViewController自体は、内部状態の変更やデリゲートメソッドの呼び出しが必要ですか?このメソッドは、向きが変更されたときにデリゲートメソッドを呼び出します。

私はそうのiOS 5に

- (BOOL) splitViewController:(UISplitViewController *)svc 
      shouldHideViewController:(UIViewController *)vc 
      inOrientation:(UIInterfaceOrientation)orientation 
{ 
    return NO; 
} 

を導入された新しいメソッドを使用することですより多くの合法的なソリューション、上で決めたので...、マスターメニューが非表示になることはありませんので、問題ポップオーバーを管理することができません。

もちろん

それはまだトップレベルではありませんUISplitViewControllers(UITabViewControllerがトップレベルであり、分割されたビューは、各タブにある)

良いが含まれて、これはまだ完全に「合法的」ではありませんどのソリューションを選んでも運が良かったです。

アップルがこのソリューションを使用しているアプリを承認することを確認したら、この返信を更新します。

関連する問題