質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xamarin

Xamarin(ザマリン)は、iPhoneなどのiOSやAndroidで動作し、C# 言語を用いてアプリを開発できるクロスプラットフォーム開発環境です。Xamarin Studioと C# 言語を用いて、 iOS と Android の両方の開発を行うことができます。

Q&A

解決済

1回答

2064閲覧

iOS13(iPad)でUIPrinterPickerController.PresentAsyncが機能しない

takapi_cs

総合スコア349

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xamarin

Xamarin(ザマリン)は、iPhoneなどのiOSやAndroidで動作し、C# 言語を用いてアプリを開発できるクロスプラットフォーム開発環境です。Xamarin Studioと C# 言語を用いて、 iOS と Android の両方の開発を行うことができます。

0グッド

0クリップ

投稿2019/10/11 03:13

編集2019/10/11 05:44

前提・実現したいこと

Xamarin.Formsでアプリ開発をしています。
iPadのiOSバージョンを13.1.2に更新したところ、印刷機能が使えなくなりました。
iOS13のiPhoneでは問題なくプリンタリストが表示されました。

発生している問題・エラーメッセージ

WARNING: Calling -[UIPrinterPickerController presentAnimated:completionHandler:] on iPad

該当のソースコード

C#

1public async Task PrintImageAsync(string filePath) 2{ 3 try 4 { 5 // 画像ファイルパス設定 6 _filePath = filePath; 7 8 // インスタンス化 9 var printerPicker = UIPrinterPickerController.FromPrinter(null); 10 11 // ★この処理後、プリンタリストが画面に表示されない 12 // プリンタリストをモーダル表示 13 var result = await printerPicker.PresentAsync(true); 14 15 // プリンタを選択したか確認 16 var printer = result.PrinterPickerController.SelectedPrinter; 17 if (printer != null) 18 { 19 // 印刷実行 20 Debug.WriteLine($"プリンタURL:{printer.Url}"); 21 var retFlag = await PrintToPrinterAsync(_filePath, printer); 22 if (!retFlag) 23 { 24 var errMsg = "印刷に失敗しました。"; 25 throw new Exception(errMsg); 26 } 27 } 28 else 29 { 30 Debug.WriteLine("プリンタが選択されていません。"); 31 } 32 } 33 catch (Exception ex) 34 { 35 var alertController = UIAlertController.Create(AppInfo.Name, ex.Message, UIAlertControllerStyle.Alert); 36 alertController.AddAction(UIAlertAction.Create("OK", UIAlertActionStyle.Default, null)); 37 await UIApplication.SharedApplication.KeyWindow.RootViewController.PresentViewControllerAsync(alertController, true); 38 } 39}

試したこと

下記を試してみましたが、結果変わらずでした。

  • PresentAsyncをPresentに変更
  • Xamarin.Formsを4.2.0.848062に更新

補足情報(FW/ツールのバージョンなど)

Visual Studio 2019
Xamarin.Forms 4.1.0.778454
iPad iOS13.1.2

なにか情報をお持ちの方は回答よろしくお願いします。

追記1

下記の記事を見つけました。
WARNING: Calling -[UIPrinterPickerController presentAnimated:completionHandler:] on iPad
iPadからの印刷機能で WARNING: Calling -[UIPrinterPickerController presentAnimated:completionHandler:] on iPad

Presentではなく、PresentFromRectを使用すれば良いみたいですが、viewの設定方法がわからず進まない状態です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

下記のようにViewを使用して、PresentFromRectAsyncを使用したところ、解決しました。
rectはx,yで吹き出し位置を指定しています。
吹き出しの大きさは、幅が「全体幅/2」、高さが「全体高さ/4」くらいに自動で設定されます。

C#

1if (UIDevice.CurrentDevice.UserInterfaceIdiom == UIUserInterfaceIdiom.Pad) 2{ 3 var rect = new CoreGraphics.CGRect(UIScreen.MainScreen.Bounds.Width * 3 / 4, UIScreen.MainScreen.Bounds.Height * 0.90, 0, 0); 4 result = await printerPicker.PresentFromRectAsync(rect, UIApplication.SharedApplication.KeyWindow.RootViewController.View, true); 5}

投稿2019/10/17 06:56

takapi_cs

総合スコア349

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問