2016-07-01 3 views
0

問題は次のとおりです。私は、最終的にテーブル、ビューなどを表示するいくつかのUINavigationControllerに、一連のUIBarButtonItemsを含むNav Barを備えたiOS 9アプリケーション(Swift)ポップオーバーとして。もちろん、これらのボタンの1つをタップしても、ナビゲーションバーの他のUIBarButtonItemが自動的に無効になるわけではなく、ユーザは自由にタップすることができます。ナビゲーションバーでのUIBarButtonItemsの無効化とセカンダリポーカーの停止

Attempt to present UINavigationControllerViewController which is already presenting (null) 

ポップオーバーa)は、残りのUIBarButtonItemsを無効にする必要が表示されたら、問題の世話をするために:ポップオーバーはすでにこれはHIGに反しているとも拒否の理由として、我々は次の警告を得るが表示付きb)追加のポップオーバーを表示することを中止する必要がある。

button A is still enabled

そこでここでは、アクションの最高の原因は何ですか?ポップオーバーのView ControllerのisBeingPresentedフラグは、他のView Controllerのアウトレットを作成できず、navigationControllerのviewControllers配列には外部ナビゲーションコントローラまたはその子孫が含まれていないため、管理ビューコントローラでは使用できません。

私のラメの回避策には、グローバルなappIsPresentingPopover Boolがあります。これは、viewDidLoadではtrueに設定され、上記のView ControllerではviewDidDisappearではfalseに設定されています。その後、Boolは、支配ビューコントローラのprepareForSegueメソッドでテストされ、追加のポップオーバーが表示されなくなります。また、すべてのコンセントを持つ有効なUIBarButtonItemsを無効にすることもできます。醜い!

この一般的なシナリオを処理する標準的な方法は何ですか?

+1

新しいポップオーバーが表示されたときを検出して、もう一方を閉じることはできますか? IMOでは、ボタンを無効にするのではなく、この方法で処理することをお勧めします。ユーザーは、邪魔にならずにポップオーバーを切り替えることができると期待しています。 –

+0

ありがとう、私は完全に同意してUXと1つのUIBarButtonItemsの有効な状態を更新することを避けるでしょう。しかし、上記の警告を避けるために何か他のことを行う前に、既存のポポバを先に閉じることが重要なので、主な問題は残っています。 – caxix

答えて

0

私の最初の試みよりも驚くほどシンプルなソリューションで、はるかにエレガントです。私はすべての関与するポップアップとUIViewControllerクラス変数のためにセグの識別子を追加しました。 prepareForSegueでは、変数をデスティネーションビューコントローラに設定します。 shouldPerformSegueWithIdentifierで、私は単にpopover変数がnilであるかどうかをチェックします。そうでなければ、私はUIViewControllerを却下し、それをnilに設定します。最後に、私はBeau Nouvelleの提案に続き、ユーザーがポップオーバーの間で直接切り替えるようにボタンを点灯させたままにしました。再度、感謝します。

+0

ブリリアント。あなた自身の答えに素敵な大きなダニを与えることもできます! –

+0

Heh、yeah - 魅力のように機能し、簡単に拡張できます。 – caxix

関連する問題