2

私はポップオーバーを使用しています。ポップオーバー内にはuitableviewが含まれており、uitableviewをタップすると値を取得したいので、内部にデリゲートを作成します。

popover.h

@class PopOverVCDelegate;
@protocol PopOverVCDelegate <NSObject>

-(void)getValue:(int)value;

@end

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

popover.m

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

メインクラスの受信デリゲートは

mainclass.h

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

mainclass.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) に設定しています。ポップオーバーの 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 に答える