Невозможно реализовать делегирование UIPopoverController - PullRequest
0 голосов
/ 26 марта 2012

В моем UIPopover есть следующий контроллер вида:

@protocol StorePopoverDelegate
- (void)storeSelected:(NSString *)store;
@end

@interface StorePopoverViewController : UITableViewController
{
    NSMutableArray* items;
}

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


@end

Когда выбран элемент, я хочу, чтобы мой делегат был вызван:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (delegate != nil) {
        [delegate storeSelected:[items objectAtIndex:indexPath.row]];
    }
}

Реализован класс делегата, который обрабатывает storeSelected:

-(IBAction)storesButtonClicked:(id)sender
{
    storesPopoverViewController = [[StorePopoverViewController alloc] initWithStyle:UITableViewStylePlain];
    storePopover.delegate = (id)self;
    storePopover = [[UIPopoverController alloc] initWithContentViewController:storesPopoverViewController]; 
    [storePopover presentPopoverFromBarButtonItem:sender permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
}

#pragma Store Popover Delegate Methods
- (void)storeSelected:(NSString *)store;
{
    NSLog(@"%@ was clicked", store);
    [storePopover dismissPopoverAnimated:YES];
}

В моем - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath делегат ноль. Я не уверен, почему? Я назначаю это.

1 Ответ

1 голос
/ 26 марта 2012

В вашем методе storesButtonClicked: вы устанавливаете делегата storePopover (который даже не инициализируется в этот момент).Вместо этого вы должны установить свойство делегата storePopoverViewController.

storePopoverViewController.delegate = (id)self; 
...