0

我在调用该popoverControllerDidDismissPopover方法时遇到了麻烦,因为我不知道将它放在哪里以及如何调用它。

我创建了一个弹出窗口,如下所示 -

//  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);
}

任何帮助都将受到欢迎。我已经花了一个星期的时间试图对其进行排序。

4

1 回答 1

1

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

弹出框将调用popoverControllerDidDismissPopover委托上的方法。您只需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
}
于 2012-08-10T13:59:47.890 回答