カスタムUIPopoverPresentationControllerクラスを使用してポップアップを表示しようとしています。しかし、それはエラー(<UIPopoverPresentationController: 0x7a772950>) should have a non-nil sourceView or barButtonItem set before the presentation occurs.
でクラッシュする以下はクラッシュが発生する私のボタンのクリックコードです。以下はプレゼンテーションがiOS 9で発生する前に、UIPopoverPresentationControllerにはnil以外のsourceViewまたはbarButtonItemが設定されている必要があります。
- (IBAction)showPopup:(UIButton *)sender {
ViewController *contentViewController = [[ViewController alloc] init];
contentViewController.preferredContentSize = CGSizeMake(200, 200);
contentViewController.modalPresentationStyle = UIModalPresentationPopover;
myPopoverController *popOver = [[myPopoverController alloc]initWithPresentedViewController:contentViewController presentingViewController:self andTintColor:[UIColor lightGrayColor]];
popOver.delegate = self;
popOver.permittedArrowDirections = UIPopoverArrowDirectionUp;
popOver.sourceRect = sender.frame;
popOver.sourceView = self.view;
[self presentViewController:contentViewController animated: YES completion: nil];
}
私はbarbuttonを持っていないが、私はsourceViewを設定しています私のカスタムUIPopoverPresentationControllerが
myPopoverController.h file
@interface myPopoverController : UIPopoverPresentationController
@property (readonly) UIColor *tintColor;
-(instancetype)initWithPresentedViewController:(UIViewController *)presentedViewController presentingViewController:(UIViewController *)presentingViewController andTintColor:(UIColor *)aTintColor;
@end
myPopoverController.m file
//Some code for UIPopoverBackgroundView
-(instancetype)initWithPresentedViewController:(UIViewController *)presentedViewController presentingViewController:(UIViewController *)presentingViewController
{
self = [self initWithPresentedViewController:presentedViewController presentingViewController:presentingViewController andTintColor: [UIColor redColor]];
return self;
}
-(instancetype)initWithPresentedViewController:(UIViewController *)presentedViewController presentingViewController:(UIViewController *)presentingViewController andTintColor:(UIColor *)aTintColor
{
self = [super initWithPresentedViewController:presentedViewController presentingViewController:presentingViewController];
if (!self) {
return nil;
}
[super setPopoverBackgroundViewClass: [myPopoverControllerBackgroundView class]];
tintColor = aTintColor;
return self;
}
どのように見えるかのサンプルです。私はここで何か間違っていますか?ビューコントローラは、新しいUIPopoverPresentationController
を使用してポップオーバーとして表示されます
をiPad
では、それはのいずれかを使用してポップオーバーのプレゼンテーションのためのアンカーポイントを指定する必要があります。助けることができる
がUIPopoverControllerがiOSの9からGamerlegend @以降 – Gamerlegend
うん...編集した答えを推奨されていません –