前提・実現したいこと
この画像のようにtoolbarを設置して、「印刷する」というボタンが使えるようにしたいのですが、
ボタンが全く反応しなくて困っています。
該当箇所
UIパーツはstoryboardで設置しています。
また、Navigation Controllerを前の方に設置しています。
「トップへ」というボタンは問題なく使えています。
上の画像のように、UIToolbarを使い、toolbar上のItemに「印刷する」というタイトルをつけています。storyboardでは「印刷する」という文字が見えなくなっていますが実行すると文字は読めるようになっています。しかし、そのボタンを押した感覚はなく、反応も全くありません。
Navigationbarを2つ、このようにstoryboard上で設定しています。
上側の遷移だとtoolbarは使えるのですが、下側の遷移はtoolbarがうまく使えなくなっています。
また、ボタンで起こしたいactionは
swift
1 @IBAction func letsprint(_ sender: UIBarButtonItem) { 2 self.showPrinterPicker() 3 }
で繋げています。
「印刷する」というボタンを配置したい画面のコードは以下のようになっています。
Swift
1import UIKit 2import PDFKit 3 4class tenkaizu: UIViewController { 5 6 var hutotappedBtnTag: Int? 7 @IBOutlet weak var pdfView: PDFView! 8 9let hoge = UserDefaults.standard.integer(forKey: "selectedTag") 10 11 var path:String = "" 12 13 override func viewDidLoad() { 14 super.viewDidLoad() 15 16 let pdfView = PDFView(frame: view.frame) 17 18 // tagを取り出す場所に(hogeに格納してます) 19 let hoge = UserDefaults.standard.integer(forKey: "selectedTag") 20 21 22 // 取り合えずプリント、値が渡ってきていなければnil 23 //print("### hoge:", hoge as Any) 24 25 //tenkaiImage.image = hu1 26 switch hoge { //今はそのまま選択した画像を表示してるけど、封筒の裏表のプレビュー的な感じにする 27 case 1: 28 print("展開1") 29 30 // 読み込み 31 // PDFDocument 32 let path: String = Bundle.main.path(forResource: "huto1", ofType: "pdf")! 33 print("取得") 34 print(path) 35 let pdfURL = URL(fileURLWithPath: path) 36 let document = PDFDocument(url: pdfURL) 37 pdfView.document = document 38 39 40 // PDFの拡大率を調整する 41 pdfView.autoScales = true 42 // 表示モード 43 pdfView.displayMode = .singlePageContinuous 44 45 view.addSubview(pdfView) 46 47 UserDefaults.standard.set(path, forKey:"Hutopath") 48 49 case 2: 50 print("展開2") 51 let path: String = Bundle.main.path(forResource: "huto2", ofType: "pdf")! 52 print("取得") 53 print(path) 54 let pdfURL = URL(fileURLWithPath: path) 55 let document = PDFDocument(url: pdfURL) 56 pdfView.document = document 57 58 59 // PDFの拡大率を調整する 60 pdfView.autoScales = true 61 // 表示モード 62 pdfView.displayMode = .singlePageContinuous 63 64 view.addSubview(pdfView) 65 66 UserDefaults.standard.set(path, forKey:"Hutopath") 67 68 default:break 69 } 70 71 } 72 73@IBAction func letsPrint(_ sender: UIButton) { 74 self.showPrinterPicker() 75 } 76 77 func showPrinterPicker() { 78 // UIPrinterPickerControllerのインスタンス化 79 let printerPicker = UIPrinterPickerController(initiallySelectedPrinter: nil) 80 81 // UIPrinterPickerControllerをモーダル表示する 82 printerPicker.present(animated: true, completionHandler: 83 { 84 [unowned self] printerPickerController, userDidSelect, error in 85 if (error != nil) { 86 // エラー 87 print("Error : (String(describing: error))") 88 } else { 89 // 選択したUIPrinterを取得する 90 if let printer: UIPrinter = printerPickerController.selectedPrinter { 91 print("Printer's URL : (printer.url)") 92 self.printToPrinter(printer: printer) 93 } else { 94 print("Printer is not selected") 95 } 96 } 97 } 98 ) 99 } 100 101 func printToPrinter(printer: UIPrinter) { 102 103 print("印刷するぜい") 104 let HutoPath = UserDefaults.standard.string(forKey:"Hutopath") 105 print(HutoPath!) 106 let pdfURL = URL(fileURLWithPath: HutoPath!) 107 108 // 印刷してみる 109 let printIntaractionController = UIPrintInteractionController.shared 110 let info = UIPrintInfo(dictionary: nil) 111 info.jobName = "HutoSample Print" 112 info.orientation = .portrait 113 printIntaractionController.printInfo = info 114 //印刷する内容 115 printIntaractionController.printingItem = pdfURL 116 printIntaractionController.print(to: printer, completionHandler: { 117 controller, completed, error in 118 }) 119 } 120 121 122 123 override func didReceiveMemoryWarning() { 124 super.didReceiveMemoryWarning() 125 } 126 127 128 129} 130 131 132
ご教授よろしくお願いいたします。
補足情報(FW/ツールのバージョンなど)
Swiftのversionは4.1.2
Xcodeのversionは9.4.1
どのように設置して、どのようにボタンにfunctionをつけようとしているのですか?それくらいは書いてくれないと誰も何も答えられません。
ご指摘ありがとうございます。なるべく詳しく説明させていただきました。
storyboardで、Navigationの「トップへ」は表示されていますが、
toolbarの「印刷する」が表示されていないのが気になります。。。
画面の最下部以外のところにtoolbarを表示すると「印刷する」とは表示されるのですがボタンの機能を持ちません。別の画面では問題なくtoolbarは使えています、、。
storyboard上の設定が問題な可能性が高いのでしょうか...。
自分の環境で試してみたところ、
storyboard上に配置し、control押しながらドラッグし、
コードに落としただけですが、普通に機能しました。
その際、storyboardのviewにもきちんと文字が表示されていましたよ。
もらったスクリーンショットからは
階層の位置等は問題なさそうに見えますが、、、
何ででしょうね。
新たな新規プロジェクトで同様にその機能だけやってみて
出来るようなら、今のプロジェクトで変な操作を
途中でしてしまったということになりますね。
toolbarを全部消して再度やってみるとか、色々試すしかなさそうですね。
Nabigationbarをふたつ設置していて、ひとつめの方はちゃんと表示されたのですが、どうもふたつめになるとtoolbarなどの機能を果たさなくなってしまうようです、、
新しいVCではちゃんと配置できたのですが、ふたつめのNavigationbarを使っているところと繋ぐと消えてしまいました。
何を言っているのですか?2つ目のNavigationbar???
もっと、的確に表現するようにしてください。
2つのviewControllerにそれぞれ、Navigation barがあるのですか???
何を言っているのか、全くわかりません。
navigationControllerが2つあるのはわかりました。
問題のボタンは、それぞれ、
別のnavigation controllerの下にあるviewに
それぞれ別に作っているんですよね?
画像を変更させていただきました。
タイトルが「展開図」となっている画面のtoolbarが使えなくなっています。
回答1件
あなたの回答
tips
プレビュー