无法实现 UIPopoverController 委托

Posted

技术标签:

【中文标题】无法实现 UIPopoverController 委托【英文标题】:Unable to implement UIPopoverController delegation 【发布时间】:2012-03-26 16:59:15 【问题描述】:

我的 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】:

在您的 storesButtonClicked: 方法中,您正在设置 storePopover 的委托(当时甚至没有初始化)。您应该改为设置 storePopoverViewController 的委托属性。

storePopoverViewController.delegate = (id)self; 

【讨论】:

以上是关于无法实现 UIPopoverController 委托的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 iOS 状态恢复来恢复 UIPopoverController?

UIPopoverController?在弹出框控制器外点击时无法关闭

无法在 UIPopoverController 中显示视图控制器

UIPopoverController & UIImagePickerControl:“无法从没有窗口的视图中呈现弹出框”

UIPopoverController 不触发委托方法

UIPopoverController for iPhone 通过实现类别