2012-05-31 29 views
0

我可以對自定義委託使用一些幫助。我試圖製作一個協議,向其委託發送消息來解除彈出視圖。這是我正在嘗試的。自定義委託,關閉另一個視圖中的彈出框

在popoverViewController.h

#import <UIKit/UIKit.h> 


@protocol MyPopoverDelegate <NSObject> 
-(void) didSelectLanguage; 
@end 



@interface Popover : UITableViewController{ 

    id <MyPopoverDelegate> delegate; 
    NSMutableArray *languageData; 

} 

@property (nonatomic, assign) id <MyPopoverDelegate> delegate; 

@end 

.M

@synthesize delegate; 

... 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    NSLog(@"You selected %@", [languageData objectAtIndex:[indexPath row]]); 
    [self.delegate didSelectLanguage]; 

} 

... 

而且在呈現酥料餅

#import <UIKit/UIKit.h> 
#import "popoverViewController.h" 




@interface ChoicesChoices : UIViewController <UIPopoverControllerDelegate, MyPopoverDelegate>{ 

    UIPopoverController *popover; 




} 
- (IBAction)facebook:(id)sender; 
- (IBAction)twitter:(id)sender; 
- (IBAction)sms:(id)sender; 
- (IBAction)copy:(id)sender; 
- (IBAction)email:(id)sender; 
- (IBAction)home:(id)sender; 
- (IBAction)mute:(id)sender; 
- (IBAction)note:(id)sender; 


@property (nonatomic, retain) UIPopoverController* popover; 


@end 

和.M

@synthesize popover; 

... 

- (void)didSelectLanguage{ 
[popover dismissPopoverAnimated:YES]; 
NSLog(@"didSelectLanguage fired"); 
} 
的視圖控制器

當我在彈出式表中選擇一行時,didSelectLanguage不會被調用。關於我可能做錯什麼的想法?謝謝你的幫助。

+1

您確定代理不是'nil'嗎?換句話說,因爲你沒有顯示代碼,我不得不問,你是否真的將委託設置爲你的'ChoicesChoices'視圖控制器的一個實例? – gschandler

+0

我不確定。那將是什麼樣子?它會進入.m嗎? – davis

+0

請參閱下面的示例 – gschandler

回答

1

確保您將您的委託設置爲呈現您的彈出窗口的視圖控制器。 ChoicesChoices.m

- (void)presentPopover 
{ 
    // assuming ARC for all allocations 
    Popover *myController = [Popover new]; 
    myController.delegate = self; 
    self.popover = [[UIPopoverController alloc] initWithContentViewController:myController]; 
    [self.popover presentPopover...]; // two flavors here, FromRect: and FromBarButtonItem:, that's left up to you to choose which one is correct. 
} 
+0

真棒,就是這樣。 – davis

1

確保在創建自定義類的實例時,將代表設置在呈現視圖控制器中。

popover.delegate = self 

此外,它看起來像你的財產是一個標準的酥料餅的控制器,而不是您的自定義視圖控制器的一個實例。

+0

其實,他的「popover」屬性很有意義。這並不意味着指的是彈出窗口包含的視圖控制器,而是彈出窗口本身。所以你的'popover.delegate = self;'是在正確的方向,錯誤的對象。 – gschandler

相關問題