オーバーレイコントローラーを読み込んでいるアプリがあります(スキャンできるようにカメラを表示します)。それはiPhoneでうまく機能し、もう一度電話した後はiPadでもうまく機能します。説明させてください。
ビューコントローラをモーダルにロードするUIButtonBarItemがあります。コントローラにはいくつかのコントロールがあり、ほとんどのボタン(ペン先を使用して定義)があります。(UIButtonBarItemアクションに応答して)コントローラーをiPhoneにロードすると、コントローラーがロードされ、すべてのボタンが毎回正常に機能します。
しかし...UIPopoverControllerを使用して同じViewControllerをロードすると、最初にロードしたときにどのボタンも応答しません。そこで、コントローラーの外側のどこかで画面をタッチして、コントローラーを閉じます。次に、同じアクションボタンをもう一度タッチします。コントローラーが読み込まれると、ViewControllerのすべてのコントロールが正常に機能します。本当に奇妙です!
【ヒント】初めてロードしたとき、ボタンがいたるところに奇妙な位置に配置されていました。その後の各呼び出しでは、適切な場所にボタンが表示されていました。ペン先の「サブビューの自動サイズ変更」を無効にすることで、これを機能させることができました。これでボタンは適切な場所に配置されましたが、このポップオーバーを初めてロードしたときにボタンが応答しません。
UIButtonBarItemに応答するために使用しているコードは次のとおりです。
-(void)launchOverlayController:(id)sender
{
if([pickerControllerPopover isPopoverVisible])
{
[pickerControllerPopover dismissPopoverAnimated:YES];
pickerControllerPopover = nil;
return;
}
// Deselect any selected cell
[self.tableView deselectRowAtIndexPath:self.tableView.indexPathForSelectedRow animated:NO];
// Working code that shows the overlay (camera on) but the overlay takes the whole screen
SRSScanVINViewController *scanVINViewController = [[SRSScanVINViewController alloc] init];
[pickerController setOverlay:scanVINViewController];
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:scanVINViewController];
[navController setModalPresentationStyle:UIModalPresentationFormSheet];
[navController setModalTransitionStyle:UIModalTransitionStyleFlipHorizontal];
[[UIApplication sharedApplication] setStatusBarHidden:YES];
if([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad)
{
pickerControllerPopover = [[UIPopoverController alloc] initWithContentViewController:pickerController];
[pickerControllerPopover setDelegate:self];
[pickerControllerPopover setPopoverContentSize:CGSizeMake(320.0f, 460.0f)];
[pickerControllerPopover presentPopoverFromBarButtonItem:sender permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
}
else
{
[self presentViewController:pickerController animated:YES completion:nil];
}
}
私は完全にアイデアがありません。初めて呼び出す場合を除いて、overlaycontroller内のコントロールが呼び出すたびに正常に機能する理由がわかりません。
事前に助けてくれてありがとう。