UIPopoverController + UINavigationController = Делегировать проблемы - PullRequest
0 голосов
/ 18 июля 2011

У меня есть два вида установки (внутри TabBar). DetailView с кнопкой, которая вызывает PopOver с NavigationController + UITableView (RootView) для загрузки данных из CoreData. У меня проблема с передачей данных из UITableView в DetailView. У меня есть протокол, объявленный в RootView и используемый в DetailView.

Вот код, который я использую для создания PopOver из кнопки, потому что я думаю, что у меня есть некоторые проблемы с делегатами. Любая помощь будет удивительной,

- (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];
    }

}

1 Ответ

1 голос
/ 18 июля 2011

Экземпляр SubZone1iPadController не существует, когда вы создаете поповер в DetailView, поэтому вы не можете установить его свойство делегата напрямую из DetailView.

.добавьте свойство делегата к iPadRootViewController, которое вы можете установить в методе zoneListButtonController.Затем, когда ipadrootviewController создает SubZone1iPadController, передайте делегата.


Итак, в обоих ipadrootviewController и SubZone1iPadController добавьте свойство delegate:

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

Затем в методе zoneListButtonController установите для свойства делегата значение iPadRootViewController:

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

Затем, где ipadrootviewController создает SubZone1iPadController:

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

Наконец, в DetailView убедитесь, что реализован метод делегата.Например:

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

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