我有一个我想要使用的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];
}
我可能错过了一些非常明显的东西(这就是为什么我提供了如此多的代码)。非常感谢!
路
答案 0 :(得分:2)
是的,简单修复。在初始化popoverController之后,您需要将exampleViewController设置为它的委托。
[popoverController setDelegate:self];
PS:在您的OptionsViewControllerDelegate协议定义之后,id delegate;
浮动是什么?您已经完成的delegate
的合成就是为它创建存储所需的全部内容。