2

我正在使用popover,popover里面有一个uitableview,我想在点击uitableview时获得价值,我在里面创建委托

弹出框.h

@class PopOverVCDelegate;
@protocol PopOverVCDelegate <NSObject>

-(void)getValue:(int)value;

@end

@interface ..
{
@property(nonatomic)id<PopOverVCDelegate> delegate;
}
@end

弹出框.m

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    [self.delegate getValue:[indexPath row]];
}

和 mainclass 接收委托是

主类.h

#import "PopOverVC.h"
@interface MainClassVC : UIViewController<PopupCatchupVCDelegate,UIPopoverControllerDelegate>
{}

主类.m

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([[segue identifier] isEqualToString:@"showPopover"])
    {
        [[segue destinationViewController] setDelegate:self];
        UIPopoverController *p = [(UIStoryboardPopoverSegue *)segue popoverController];
        p.popoverBackgroundViewClass = [CustomPopoverBackground class];
        self.popoverController = p;        
        popoverController.delegate = self;
    }
}

-(void)getValue:(int)value
{
    NSLog(@"adsf-%d",value);
}

我没有从代表那里得到任何价值。任何人都可以帮助我,我使用情节提要并从推送导航中调用弹出框。

4

1 回答 1

0

在 popover.h 你声明了协议 PopOverVCDelegate & 在 mainclass.h 你正在实现 PopupCatchupVCDelegate 协议。您的主类应该向 PopOverVCDelegate 确认。

@interface MainClassVC : UIViewController<PopOverVCDelegate, PopupCatchupVCDelegate, UIPopoverControllerDelegate>

此外,您应该在调用它之前检查委托方法是否已实现 -

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    if([self.delegate respondsToSelector:@selector(getValue:)])
        [self.delegate getValue:[indexPath row]];
}

编辑

我查看了故事板并注意到,您的委托没有设置为正确的控制器。您正在将委托设置为 p(UIPopoverController),您应该将其设置为 popover 的 contentViewController(PopOver)。

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([[segue identifier] isEqualToString:@"idenPopover"])
    {
        [[segue destinationViewController] setDelegate:self];
        UIPopoverController *p = [(UIStoryboardPopoverSegue *)segue popoverController];
        p.popoverBackgroundViewClass = [CustomPopoverBackground class];
        self.popoverController = p;
        self.popoverController.delegate = self;

        //set delegate to PopOver 
        UINavigationController *navigationController = (UINavigationController*)p.contentViewController;
        PopOver *popOver = (PopOver*)navigationController.topViewController;
        [popOver setDelegate:self];
    }
}
于 2012-12-30T03:48:37.703 回答