2012-08-10 89 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