7

UIPopupControllerで遊んでみたかったのですが、ポップオーバーがいつ終了するかを検出できないことがわかりました。私の手順:
1。XCodeから例を作成します([ファイル]->[新しいプロジェクト]->[ユーティリティアプリケーション])2。MainViewController.h
に追加しますUIPopoverControllerDelegate

#import "FlipsideViewController.h"

@interface MainViewController : UIViewController <FlipsideViewControllerDelegate,UIPopoverControllerDelegate>

@property (strong, nonatomic) UIPopoverController *flipsidePopoverController;

- (IBAction)showInfo:(id)sender;

@end
  1. MainViewControllerの場合:
    -(IBAction)showInfo:(id)sender
    {{
        if([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone){
            FlipsideViewController * controller = [[FlipsideViewController alloc] initWithNibName:@ "FlipsideViewController" bundle:nil];
            controller.delegate = self;
            controller.modalTransitionStyle = UIModalTransitionStyleFlipHorizo​​ntal;
            [自己presentModalViewController:コントローラーアニメーション:YES];
        } そうしないと {
            if(!self.flipsidePopoverController){
                FlipsideViewController * controller = [[FlipsideViewController alloc] initWithNibName:@ "FlipsideViewController" bundle:nil];
                controller.delegate = self;

                self.flipsidePopoverController.delegate = self

                self.flipsidePopoverController = [[UIPopoverController alloc] initWithContentViewController:controller];
            }
            if([self.flipsidePopoverController isPopoverVisible]){
                [self.flipsidePopoverController dismissPopoverAnimated:YES];
            } そうしないと {
                [self.flipsidePopoverController presentPopoverFromBarButtonItem:sender permitArrowDirections:UIPopoverArrowDirectionAnyアニメーション:YES];
            }
        }
    }

    -(void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController
    {{
        NSLog(@ "OLOLO");
    }

しかし、どこかをタップしてポップオーバーが消えると、コンソールにNSLogメッセージが表示されません。私は何が間違っているのですか?

4

4 に答える 4

15

ポップオーバーのデリゲートをselfに設定し、2つのポップオーバーデリゲートを使用することもできます:-

 /* Called on the delegate when the popover controller will dismiss the popover. Return NO to prevent the dismissal of the view.
 */
- (BOOL)popoverControllerShouldDismissPopover:(UIPopoverController *)popoverController;

/* Called on the delegate when the user has taken action to dismiss the popover. This is not called when -dismissPopoverAnimated: is called directly.
 */
- (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController;
于 2012-11-30T11:03:10.153 に答える
2

MainViewController インスタンスをポップオーバーのデリゲートとして設定しましたか?

(コードでポップオーバーを作成する場合) popover.delegate = self;

于 2012-04-25T16:11:32.137 に答える