私はこれについてたくさんのことを読みましたが、ほとんどがストーリーボード以外のアプローチに関するものであるように見えますが、私はビットをつなぎ合わせて理解したと思いました. ただし、次のコードでは、ポップオーバーが閉じられません。Popover の DismissPopoverButtonPressed ボタンは実行されますが、デリゲートの DismissPopover メソッドのブレークポイントはヒットしません。間違いを見つけるためにコードに目を向けている人に感謝します。
ありがとう
以下では、NewGameViewController に UIButton が含まれています。これを押すと、ポップオーバー セグエが発生し、その後に PopViewController UIView を含むポップオーバーが表示されます。
NewGameViewController.h
#import "PopViewController.h"
@interface NewGameViewController: UIViewController <DismissPopoverDelegate>
{
UIPopoverController *popover;
}
NewGameViewController.m
@implementation NewGameViewController
-(void)prepareForSegue:(UIStoryboardPopoverSegue *)segue sender:(id)sender
{
if ([[segue identifier] isEqualToString:@"popoverSegue"])
{
popover = [(UIStoryboardPopoverSegue *)segue popoverController];
// getting warning: Assigning to 'id<UIPopoverControllerDelegate>' from incompatible type 'NewGameViewController *const__strong'
//popover.delegate = self;
}
}
-(void)dismissPopover
{
[popover dismissPopoverAnimated:YES];
}
PopViewController.h
@protocol DismissPopoverDelegate <NSObject>
-(void) dismissPopover;
@end
@interface PopViewController: UIViewController
{
__unsafe_unretained id<DismissPopoverDelegate> delegate;
}
@property (nonatomic, assign) id<DismissPopoverDelegate> delegate;
-(IBAction)dismissPopoverButtonPressed:(id)sender;
@end
PopViewController.m
#import "NewGameViewController.h"
@implementation PopViewController
@synthesize delegate;
-(IBAction)dismissPopoverButtonPressed:(id)sender
{
[self.delegate dismissPopover];
}