2012-08-10 87 views
0

我很难调用popoverControllerDidDismissPopover方法,因为我不知道该把它放在哪里以及如何调用它。如何调用'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]; 

} 

我知道我必须把我的酥料饼自我的代表,以调用该方法,但不能工作的代码是什么。

我曾尝试 -

self.playerPopUpVC.delegate=self 

但Xcode中不喜欢它。

我酥料饼类看起来是这样的 -

// 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

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

弹出窗口将会调用代理上的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 
} 
+0

嗨天使,感谢您的快速回复。我现在添加了popover类。是的,我知道我必须告诉代表使用解雇方法。那么dimiss方法会进入委托类.m呢?另外,你说我错误地分配了上面的self.popUp。我在创建的弹出方法内创建弹出窗口外的弹出窗口。因此,它只会让我将PlayerPopVC&popUp称为.self。有什么想法吗?谢谢保罗 – 2012-08-10 14:47:33

+0

我更新了我的答案。查看它并请阅读代理模式的工作原理,因为您还没有理解它。 – 2012-08-10 14:55:21

+0

而且你不需要在你的PlayerPopUpVC中实现UIPopoverControllerDelegate,因为它不是popover的委托! – 2012-08-10 14:56:46