UIPopoverController Делегат Проблема? - PullRequest
0 голосов
/ 31 августа 2011

У меня есть UIPopover, который я хочу использовать либо

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

или

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

на. Кажется, ни один из них не работает (и я уверен, что если один из них будет исправлен, другой тоже будет исправлен, так как это, вероятно, проблема с делегатами). Для делегатов вот что у меня есть:

В optionsViewController.h, представление внутри поповера:

#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);
    }

Для представления поповера я использую:

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

Я, вероятно, упускаю что-то действительно очевидное (именно поэтому я дал так много своего кода) Большое спасибо!

Люк

1 Ответ

2 голосов
/ 31 августа 2011

Да, простое исправление.После того, как вы запустите popoverController, вам нужно установить exampleViewController в качестве его делегата.

 [popoverController setDelegate:self];

PS: Что означает значение id delegate; после определения протокола OptionsViewControllerDelegate?Синтез delegate, который вы уже делаете, - это все, что вам нужно, чтобы создать хранилище для него.

...