如何调用'popoverControllerDidDismissPopover'方法?

时间:2012-08-10 13:37:17

标签: ios uipopovercontroller

我无法调用popoverControllerDidDismissPopover方法,因为我不知道将它放在哪里以及如何调用它。

我创建了一个popover,如下所示 -

//  SettingsViewController.h
#import <UIKit/UIKit.h>
#import <QuartzCore/QuartzCore.h>
#import "ViewController.h"
#import "SharedData.h"
#import "PlayerPopUpVC.h"

@interface SettingsViewController : UIViewController <UITableViewDataSource, UIPopoverControllerDelegate> {

- (IBAction)popUp:(id)sender;


@property (strong, nonatomic) UIPopoverController *playerPopUpVC;
@property (strong, nonatomic) PlayerPopUpVC *popUp;




//  SettingsViewController.m
#import "SettingsViewController.h"



- (IBAction)popUp:(id)sender {

    UIButton *editPlayers = (UIButton *)sender;

    if(self.playerPopUpVC) {

        self.popUp= [[PlayerPopUpVC alloc] initWithNibName:@"PlayerPopUpVC" bundle:nil];

        self.popUp=[[UIPopoverController alloc] initWithContentViewController:self.popUp];

    }

    [self.playerPopUpVC presentPopoverFromRect:[editPlayers frame] inView:[editPlayers superview] permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; 

}

我知道我必须将我的PopOver的委托设置为self才能调用方法,但无法确定代码是什么。

我试过了 -

self.playerPopUpVC.delegate=self

但Xcode不喜欢它。

我的popOver类看起来像这样 -

//  PlayerPopUpVC.h
#import <UIKit/UIKit.h>

@interface PlayerPopUpVC : UIViewController <UITableViewDataSource, UIPopoverControllerDelegate> {


}


//  PlayerPopUpVC.m

#import "PlayerPopUpVC.h"

@interface PlayerPopUpVC ()

@end

- (void)viewDidLoad
{
    [super viewDidLoad];


    self.modalInPopover = NO;
    self.contentSizeForViewInPopover = CGSizeMake(240, 400);
}

任何帮助都是最受欢迎的。我现在花了一个星期试图对它进行排序。

1 个答案:

答案 0 :(得分:1)

首先,您需要了解委托模式,这似乎您还没有完全理解。

popover将是在委托上调用popoverControllerDidDismissPopover方法的popover。您只需在类中实现UIPopoverControllerDelegate协议,并将自己指定为弹出窗口的委托。为什么你说XCode不喜欢它?请提供更多信息。

此外,您在此处进行了错误的分配:

self.popUp=[[UIPopoverController alloc] initWithContentViewController:self.popUp];

编辑:提供了更多代码来帮助解决错误。请在下次提出这些问题之前查看代表模式。

你的SettingsController.m应该改为:

- (IBAction)popUp:(id)sender {

    UIButton *editPlayers = (UIButton *)sender;

    if(!self.popUp) {

        self.popUp= [[PlayerPopUpVC alloc] initWithNibName:@"PlayerPopUpVC" bundle:nil];
    }

    self.playerPopUpVC=[[UIPopoverController alloc] initWithContentViewController:self.popUp];            
    self.playerPopUpVC.delegate = self;
    [self.playerPopUpVC presentPopoverFromRect:[editPlayers frame] inView:[editPlayers superview] permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; 

}
- (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController {
   // Your code here
}