この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
UIPrinterPickerController
UIPrinterPickerController は iOS 8 から追加された、プリンターを検索し選択するための View Controller を提供するクラスです。以前まで印刷を行う方法は UIPrintInteractionController を使って実装することができましたが、View Controller がすべて提供された形でしたので View のカスタマイズが難しかったです。このクラスを通してプリンターを選択することで、その後の印刷処理が View を介さなくても実装できるようになりました。
UIPrinterPickerController を使う
UIPrinterPickerController は次のように表示します。
func showPrinterPicker() {
// UIPrinterPickerControllerのインスタンス化
let printerPicker = UIPrinterPickerController(initiallySelectedPrinter: nil)
// UIPrinterPickerControllerをモーダル表示する
printerPicker.presentAnimated(true, completionHandler: {
[unowned self] printerPickerController, userDidSelect, error in
if (error != nil) {
// エラー
println("Error : \(error)")
} else {
// 選択したUIPrinterを取得する
if let printer: UIPrinter = printerPickerController.selectedPrinter {
println("Printer : \(printer.displayName!)")
self.printToPrinter(printer)
} else {
println("Printer is not selected")
}
}
})
}
func printToPrinter(printer: UIPrinter) {
// 印刷してみる
if let printIntaractionController = UIPrintInteractionController.sharedPrintController() {
let info = UIPrintInfo(dictionary: nil)
info.jobName = "Sample Print"
info.orientation = .Portrait
printIntaractionController.printInfo = info
printIntaractionController.printingItem = UIImage(named: "sample.jpg")
printIntaractionController.printToPrinter(printer, completionHandler: {
controller, completed, error in
})
}
}
解説します。まずはじめに UIPrinterPickerController をインスタンス化していますが、引数に UIPrinter を渡すことができます。これは表示されるプリンター一覧に、前回選択したプリンターにチェックを付けたいときに使います。特に必要ない場合は nil を渡せば良いです。
次に presentAnimated:completionHandler: を呼び出し、UIPrinterPickerController を表示しています。第一引数はアニメーションするか否か、第二引数はコールバック関数として (UIPrinterPickerController!, Bool, NSError!) -> Void 型の関数を渡します。この第一引数の UIPrinterPickerController の selectedPrinter から選択した UIPrinter が取得できます(Optional にラップされているので、アンラップする必要があります)。あとはこのオブジェクトを UIPrintInteractionController の printToPrinter:completionHandler: に渡せば、指定したプリンターで印刷できます。
また、UIPrinterPickerController を表示するメソッドは次のように、3種類用意されています。
メソッド | 説明 |
---|---|
presentAnimated(_:completionHandler:) | モーダルで表示 |
presentFromBarButtonItem(_:animated:completionHandler:) | UIBarButtonItem からポップオーバーで表示 |
presentFromRect(_:inView:animated:completionHandler:) | ポップオーバーで表示 |
なお上記コードでは記述していませんが、dismissAnimated: で好きなタイミングで閉じることができます。
実行する
それでは実行してみましょう。上記の関数を呼び出すと、次のように利用可能なプリンターのリストが表示されます。弊社には EPSON の複合機が一台あるので、それが表示されています。
AirPrint が利用できないと、次のように何も表示されません。
まとめ
UIPrinterPickerController によって、プリンターを選択する実装がかなり自由になりましたね。