0

これは基本的に次の続きです。開いているときにBarButtonItemが押されたときにiPadUIPopoverControllerを閉じるが、この問題は別の質問を正当化するのに十分な大きさであると思います。

基本的に、彼らは、barbuttonitem(splitviewcontrollerによって提供される)がクリックされたときにポップオーバーを表示し、同じbarbuttonitemが再度クリックされたときにポップオーバーを非表示にしたいと考えていました。彼らは電話でそれを解決しました:

- (void)splitViewController:(UISplitViewController*)svc popoverController:(UIPopoverController*)pc willPresentViewController:(UIViewController *)aViewController{
    if ([popoverController isPopoverVisible]) {
        [popoverController dismissPopoverAnimated:YES];
    }
}

ただし、barbuttonitemを最初にクリックすると、このメソッドが正しく呼び出され、ポップオーバーが表示されるという問題が発生しました。ただし、ポップオーバーが開いているときにbarbuttonitemを続けてクリックしても、このメソッドは呼び出されません。

さらに不可解なことに、他の方法(ポップオーバーの外側をクリック)でポップオーバービューを閉じると、ポップオーバーは自動的に閉じます。ただし、ボタン自体をクリックしてもポップオーバーは閉じず、「willPresentViewController」メソッドも呼び出されません。

このボタンクリックアクションをキャッチする他の手段はありますか?または、ポップオーバーが開いているときにボタンをクリックしてもメソッドが呼び出されない理由について何か考えはありますか?

4

1 に答える 1

0

したがって、「マスター」ボタンをもう一度クリックすると、通常のUISplitViewControllerが自動的に閉じるように見えますが、私はMGSplitViewControllerを使用しています。そこで、MGSplitViewController.m(具体的にはshowMasterPopover :)を変更して、ボタンが2回クリックされたときに自分自身を閉じる処理を次のように処理しました。

-(IBAction)showMasterPopover:(id)sender
{
    if (_hiddenPopoverController && !(_hiddenPopoverController.popoverVisible)) 
    {
        // Inform delegate.
        if (_delegate && [_delegate respondsToSelector:@selector(splitViewController:popoverController:willPresentViewController:)]) 
        {
            [(NSObject <MGSplitViewControllerDelegate> *)_delegate splitViewController:self popoverController:_hiddenPopoverController willPresentViewController:self.masterViewController];
        }
        // Show popover.
        [_hiddenPopoverController presentPopoverFromBarButtonItem:_barButtonItem permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
    }
    else if(_hiddenPopoverController && _hiddenPopoverController.popoverVisible)
    {
        [_hiddenPopoverController dismissPopoverAnimated:YES];
    }
}
于 2012-05-30T15:51:30.730 に答える