2

戻るボタン、編集ボタン、ポップオーバーを開くボタンなど、複数のボタンを含むナビゲーション バーがあります。

ポップオーバーが開いていて、ユーザーが他のボタンをタップすると、ポップオーバーが閉じます。すべてのボタンのすべてのタップを検出し、ポップオーバーが開いている場合はアクションを傍受しようとすることもできますが、よりエレガントなオプションがあるかもしれません. ナビゲーションバー内にないすべてのアイテムのタップで機能します。ナビゲーションバーのボタンのみがポップオーバーを閉じません。

助言がありますか?

私の質問は、NavigationBar をクリックしても UIPopoverController が却下されないことに非常に似ていますが、作者に問題を解決したかどうかを尋ねる方法がないようです。

4

3 に答える 3

10

これは少し遅いかもしれませんが、他のすべての人にとっては:

この問題が発生する理由は、ナビゲーション バーにあるボタンをクリックしたときに popoverController が表示される場合、ナビゲーション コントローラがデフォルトで popoverControllerのpassthroughViewsに存在するためです。

これを解決するには、passthroughViews の参照を nil にするだけです。

したがって、popoverController を提示した直後に次の行を追加します

popoverController.passthroughViews = nil;

うまくいけば、これは誰かを助けます。

于 2013-02-21T07:15:54.590 に答える
2

各ボタンのセレクターを同じメソッドに割り当てます。まず、ポップオーバーが開いているかどうかを確認してから閉じてから、各ボタンをそのメソッドにリダイレクトします。

-(IBAction) navButtons:(UIBarButtonItem *)sender {
     if(![popoverController isPopoverVisible] && sender.tag == 1){//assume that just one button will open the popover
         //present the popover
     } else {
         //dismiss the popover
     }

     switch (sender.tag) {
        case 1:
             [self button1Handler];
             break;
        case 2:
             [self button2Handler];
             break;
        /*...
          ...
          ...*/
        default:
             break;
    }
}

これがあなたが使用できる最良のソリューションだと思います。

于 2012-10-07T20:34:51.313 に答える
0

ナビゲーション バーの項目は自動的に popoverViewController の passthroughViews に追加されます。ポップオーバーが表示された後に発生します。そのため、その後 passthroughViews をクリアする必要があります。

iOS 8 では、UIViewController.popoverPresentationController から popoverController を取得できます。その前に、UIStoryboardPopoverSegue から popoverController を取得できます。

コードサンプルについては、次のリンクを参照してください。

https://stackoverflow.com/a/27054252/2919070

于 2014-11-21T04:43:16.560 に答える