davis
davis

Reputation: 1951

Custom Delegate, dismiss popover from another view

I could use some help with custom delegates. I'm trying to make a protocol that sends a message to its delegate to dismiss the popover view. Here is what I'm trying.

In the 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];

}

...

And in the ViewController that presents the popover

#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

and .m

@synthesize popover;

...

- (void)didSelectLanguage{
[popover dismissPopoverAnimated:YES];
NSLog(@"didSelectLanguage fired");
}

When I select a row in the table of the popover, didSelectLanguage does not get called. Any ideas on what I might be doing wrong? Thanks for your help.

Upvotes: 0

Views: 1490

Answers (2)

gschandler
gschandler

Reputation: 3208

Make sure you are setting your delegate to the be the view controller that is presenting your popover. Something like this in 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.
}

Upvotes: 1

Dcritelli
Dcritelli

Reputation: 820

Make sure you set the delegate in the presenting view controller when you create the instance of your custom class.

popover.delegate = self

Also, it looks like your property is a standard popover controller instead of an instance of your custom view controller.

Upvotes: 1

Related Questions