0

カスタム デリゲートの助けを借りることができます。デリゲートにメッセージを送信してポップオーバー ビューを閉じるプロトコルを作成しようとしています。これが私が試していることです。

popoverViewController.h で

#import <UIKit/UIKit.h>


@protocol MyPopoverDelegate <NSObject>
-(void) didSelectLanguage;
@end



@interface Popover : UITableViewController{

    id <MyPopoverDelegate> delegate;
    NSMutableArray *languageData;

}

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

@end

.m

@synthesize delegate;

...

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSLog(@"You selected %@", [languageData objectAtIndex:[indexPath row]]);
    [self.delegate didSelectLanguage];

}

...

そして、ポップオーバーを表示する ViewController で

#import <UIKit/UIKit.h>
#import "popoverViewController.h"




@interface ChoicesChoices : UIViewController <UIPopoverControllerDelegate, MyPopoverDelegate>{

    UIPopoverController *popover;




}
- (IBAction)facebook:(id)sender;
- (IBAction)twitter:(id)sender;
- (IBAction)sms:(id)sender;
- (IBAction)copy:(id)sender;
- (IBAction)email:(id)sender;
- (IBAction)home:(id)sender;
- (IBAction)mute:(id)sender;
- (IBAction)note:(id)sender;


@property (nonatomic, retain) UIPopoverController* popover;


@end

そしてM

@synthesize popover;

...

- (void)didSelectLanguage{
[popover dismissPopoverAnimated:YES];
NSLog(@"didSelectLanguage fired");
}

ポップオーバーのテーブルで行を選択すると、didSelectLanguage が呼び出されません。私が間違っているかもしれないことについてのアイデアはありますか? ご協力いただきありがとうございます。

4

2 に答える 2

1

カスタム クラスのインスタンスを作成するときは、表示側のビュー コントローラーでデリゲートを設定してください。

popover.delegate = self

また、プロパティは、カスタム ビュー コントローラーのインスタンスではなく、標準のポップオーバー コントローラーのようです。

于 2012-05-31T20:27:02.617 に答える
1

デリゲートをポップオーバーを表示するビュー コントローラーに設定していることを確認してください。のようなものChoicesChoices.m

- (void)presentPopover
{
  // assuming ARC for all allocations
    Popover *myController = [Popover new];
    myController.delegate = self;
    self.popover = [[UIPopoverController alloc] initWithContentViewController:myController];
    [self.popover presentPopover...];  // two flavors here, FromRect: and FromBarButtonItem:, that's left up to you to choose which one is correct.
}
于 2012-05-31T20:32:37.653 に答える