UIPopoverController委托问题?

时间:2011-08-31 03:28:52

标签: objective-c ios xcode uipopovercontroller uipopover

我有一个我想要使用的UIPopover

-(BOOL)popoverControllerShouldDismissPopover:(UIPopoverController *)popoverController{
    return NO;
}

-(void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController{}

上。它们似乎都不起作用(我确信一旦修复,另一个也将修复,因为它可能是代表的问题)。对于代表们来说,这就是我所拥有的:

在optionsViewController.h中,popover内的视图:

#import <UIKit/UIKit.h>

@protocol OptionsViewControllerDelegate <NSObject>


-(void)didPick:(NSString *)string;
@end
id delegate;


@interface OptionsViewController : UIViewController <OptionsViewControllerDelegate>{

    IBOutlet UIPickerView *picker;
    NSMutableArray *list;

}
@property (nonatomic, copy) NSArray *passthroughViews;
@property(nonatomic,retain) NSMutableArray *list;
@property(nonatomic,assign) id<OptionsViewControllerDelegate> delegate;

@end

和.m:

@synthesize delegate;

并在出现弹出窗口的视图的.h中:

@interface exampleViewController : UIViewController <OptionsViewControllerDelegate,UIPopoverControllerDelegate>{
    UIPopoverController *popoverController;
    OptionsViewController *optionsViewController;
}

和.m:

@synthesize popoverController;
@synthesize optionsViewController;
-(BOOL)popoverControllerShouldDismissPopover:(UIPopoverController *)popoverController{
    return NO;
}

    [popoverController release];
    [optionsViewController release];

在ViewDidLoad中,我有:

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {

        optionsViewController =[[OptionsViewController alloc]init];
        optionsViewController.delegate = self;
        popoverController = [[UIPopoverController alloc] initWithContentViewController:optionsViewController];
        popoverController.popoverContentSize = CGSizeMake(320, 216);
    }

要呈现popover,我使用:

-(IBAction)showDecadePopover{
    [popoverController presentPopoverFromRect:CGRectMake(150, 50, 150, 50) inView:self.view permittedArrowDirections:UIPopoverArrowDirectionLeft animated:YES];
}

我可能错过了一些非常明显的东西(这就是为什么我提供了如此多的代码)。非常感谢!

1 个答案:

答案 0 :(得分:2)

是的,简单修复。在初始化popoverController之后,您需要将exampleViewController设置为它的委托。

 [popoverController setDelegate:self];

PS:在您的OptionsViewControllerDelegate协议定义之后,id delegate;浮动是什么?您已经完成的delegate的合成就是为它创建存储所需的全部内容。