Christian
Christian

Reputation: 1

UIPopoverController + UINavigationController = Delegate problems

I have two views setup ( inside a TabBar). The DetailView with a button that calls a PopOver with a NavigationController+UITableView (RootView) loading data from CoreData. I have a problem passing data from the UITableView to the DetailView. I have a protocol declared in RootView and used in the DetailView.

Here is the code I use to create the PopOver from the button because I think I have some delegate issues. Any help will be amazing,

- (IBAction)zoneListButtonController
{
    if (self.controladorPopOver == nil) {

        ipadrootviewController = [[iPadRootViewController alloc] initWithNibName:@"iPadRootView" bundle:[NSBundle mainBundle]];
        UINavigationController *ipadnavController = [[UINavigationController alloc]
                                                 initWithRootViewController:ipadrootviewController];

        UIPopoverController *popover = [[UIPopoverController alloc] initWithContentViewController:ipadnavController];

        self.controladorPopOver = popover;
        popover.delegate = self;
        self.title = @"Countries";
        popover.popoverContentSize = CGSizeMake(320, 300);
        [self.controladorPopOver presentPopoverFromRect:CGRectMake(112, 20, 86, 27) inView:self.view permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES];


        [ipadnavController release];
        [controladorPopOver release];
    }

}

Upvotes: 0

Views: 1938

Answers (1)

user467105
user467105

Reputation:

An instance of the SubZone1iPadController doesn't exist when you create the popover in DetailView so you can't set its delegate property directly from the DetailView.

One option is to also add the delegate property to the iPadRootViewController which you can set in the zoneListButtonController method. Then, when ipadrootviewController creates the SubZone1iPadController, pass along the delegate.


So in both ipadrootviewController and SubZone1iPadController, add a delegate property:

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

Then, in the zoneListButtonController method, set the delegate property on iPadRootViewController:

ipadrootviewController = [[iPadRootViewController alloc] init...
ipadrootviewController.delegate = self;

Then, where ipadrootviewController creates SubZone1iPadController:

SubZone1iPadController *sz1 = [[SubZone1iPadController alloc] init...
sz1.delegate = self.delegate;
[self.navigationController pushViewController:...
[sz1 release];

Finally, in the DetailView, make sure the delegate method is implemented. For example:

-(void)SubZone1Tap:(NSString *)name
{
    NSLog(@"SubZone1Tap, name = %@", name);

    //dismiss the popover if that's what you need to do...
    [controladorPopOver dismissPopoverAnimated:YES];
}

Upvotes: 1

Related Questions