1

画面のどこかに単純なポップオーバーを作成しようとしていますが、何らかの理由でクラッシュし続けます。それは私に何のエラーも与えません(ゾンビオブジェクトが有効になっています)

UIViewController *viewController = [[UIViewController alloc] init];
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 200, 200)];
view.backgroundColor = [UIColor redColor];
viewController.view = view;

UIPopoverController *popover = [[UIPopoverController alloc] initWithContentViewController:viewController];
[popover presentPopoverFromRect:CGRectMake(0, 0, 100, 100) inView:self.view.superview permittedArrowDirections:UIPopoverArrowDirectionDown animated:YES];

ランダムな位置にポップオーバーを作成しようとしていますが、これは不可能ですか?

編集:このようにも試してみました

@property (nonatomic, retain) UIPopoverController *popover;

@synthesize popover = _popover;

UIViewController *viewController = [[UIViewController alloc] init];
viewController.view.backgroundColor = [UIColor redColor];

_popover = [[UIPopoverController alloc] initWithContentViewController:viewController];
_popover.delegate = self;
[_popover presentPopoverFromRect:CGRectMake(0, 0, 200, 200) inView:self.view permittedArrowDirections:UIPopoverArrowDirectionDown animated:YES];

EDIT2:関連している可能性があり、言及するのを忘れていましたが、このコードは別のビューで呼び出されています。

これはうまくいきます!

UIViewController *viewController = [[UIViewController alloc] init];
viewController.contentSizeForViewInPopover = CGSizeMake(200, 200);
viewController.view.backgroundColor = [UIColor redColor];

UIPopoverController *popver1 = [[UIPopoverController alloc] initWithContentViewController:viewController];
[popver1 presentPopoverFromRect:CGRectMake(250, 200, 200, 200) inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];

DocumentViewController *document = [[DocumentViewController alloc] initWithIssue:_readerModel.currentIssue];
[self.navigationController pushViewController:document animated:YES];

DocumentViewController 内で同じ EXACT コードを呼び出すと、機能しません。

4

3 に答える 3

3

うーん。ここでクラッシュの理由がわかりません (コードをテストすると正常に動作します)。

しかしself.view.superviewあなたのコードからの場合、次nilのようなメッセージでクラッシュします

 [...] Popovers cannot be presented from a view which does not have a window [...]

そしてpopover:適切に表示したい場合は、さらにいくつかの修正を行う必要があります。

  • contentSizeForViewInPopoverのプロパティを設定しviewController て、 の実際のサイズを管理しますpopover

  • に変更UIPopoverArrowDirectionDownUIPopoverArrowDirectionAny ます (特に、提示元に rect を使用する場合origin=(0,0))。そうしないと、 が表示されませんpopover

于 2012-08-30T09:40:05.457 に答える
2

ポップオーバーを表示する前に、ウィンドウが nil かどうかを確認できます

if (self.view.window != nil)

viewDidLoadまた、上記のコードをORで呼び出していますviewWillAppearか?

viewDidAppearメソッドまたはdidMoveToWindowメソッドから同じコードを試すことができますか

于 2012-08-30T10:06:07.253 に答える
1

ローカル変数ではなく、プロパティとしてポップオーバーを定義する必要があると思います

于 2012-08-30T09:07:22.117 に答える