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

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

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

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

2835閲覧

toolbarのItemが使えない

mimamo

総合スコア44

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2019/01/13 15:42

編集2019/01/17 02:44

前提・実現したいこと

イメージ説明
この画像のように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

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

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

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

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

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

hameji001

2019/01/13 16:42

どのように設置して、どのようにボタンにfunctionをつけようとしているのですか?それくらいは書いてくれないと誰も何も答えられません。
mimamo

2019/01/13 17:00

ご指摘ありがとうございます。なるべく詳しく説明させていただきました。
hameji001

2019/01/15 16:10

storyboardで、Navigationの「トップへ」は表示されていますが、 toolbarの「印刷する」が表示されていないのが気になります。。。
mimamo

2019/01/15 19:12

画面の最下部以外のところにtoolbarを表示すると「印刷する」とは表示されるのですがボタンの機能を持ちません。別の画面では問題なくtoolbarは使えています、、。 storyboard上の設定が問題な可能性が高いのでしょうか...。
hameji001

2019/01/15 23:32

自分の環境で試してみたところ、 storyboard上に配置し、control押しながらドラッグし、 コードに落としただけですが、普通に機能しました。 その際、storyboardのviewにもきちんと文字が表示されていましたよ。 もらったスクリーンショットからは 階層の位置等は問題なさそうに見えますが、、、 何ででしょうね。 新たな新規プロジェクトで同様にその機能だけやってみて 出来るようなら、今のプロジェクトで変な操作を 途中でしてしまったということになりますね。 toolbarを全部消して再度やってみるとか、色々試すしかなさそうですね。
mimamo

2019/01/16 01:29

Nabigationbarをふたつ設置していて、ひとつめの方はちゃんと表示されたのですが、どうもふたつめになるとtoolbarなどの機能を果たさなくなってしまうようです、、 新しいVCではちゃんと配置できたのですが、ふたつめのNavigationbarを使っているところと繋ぐと消えてしまいました。
hameji001

2019/01/16 05:14

何を言っているのですか?2つ目のNavigationbar??? もっと、的確に表現するようにしてください。 2つのviewControllerにそれぞれ、Navigation barがあるのですか??? 何を言っているのか、全くわかりません。
hameji001

2019/01/16 11:38

navigationControllerが2つあるのはわかりました。 問題のボタンは、それぞれ、 別のnavigation controllerの下にあるviewに それぞれ別に作っているんですよね?
mimamo

2019/01/16 12:39

画像を変更させていただきました。 タイトルが「展開図」となっている画面のtoolbarが使えなくなっています。
guest

回答1

0

ベストアンサー

下記のようなサンプルを作ってみましたが、
(もちろんですが)どちらのviewもtoolbarのボタンは普通に反応しましたよ?

作り方をちゃんとすれば、大丈夫だと思いますが、、、
変なことはせず、基本通り作ってみてください。

イメージ説明

投稿2019/01/16 12:15

hameji001

総合スコア639

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

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

mimamo

2019/01/17 02:53

ありがとうございます! Navigationbarの次の画面ではどちらともうまくいきましたが、そのまた次の画面ではうまくいきませんでした。storyboard上の設定を確認していったところ、Navigationbarの次の画面の設定が上と下で異なっていました。修正すると、ボタンが表示されるようになりましたが相変わらず反応しませんでした。 調べてみたところ、 >>ボタン等がaddSubViewされているUIViewよりもボタンがはみ出していると反応しない。 >>表示はされていても押したりできない状態になることがある。 引用元(https://qiita.com/KatagiriSo/items/352a75b16680df8e18e9) とありました。 もしかしたらボタンを配置するところにPDF表示を行なっているのが原因ではないかと思いましたが、、わからないままです。
hameji001

2019/01/17 04:17

なら、重ならないようにすればいいのではないでしょうか?
mimamo

2019/01/19 03:20

すみませんお返事遅くなりました。PDFの背景を重ならないようにすればいいのかなと思ったのですが、できそうになかったです。次のページに遷移してその後ボタンを配置しようかなと考えています。
hameji001

2019/01/19 04:53

次のページでは大丈夫なのですか?
mimamo

2019/01/21 14:16

お返事遅くなりました、、 PDFを表示していない画面では使えています!
hameji001

2019/01/21 23:12

pdfを表示するのを全画面にしているからかもしれないので、 toolbarとステータスバー以外に、その間を埋めるviewをもう1個起き、 それをIBOutletで繋ぎ、そこにpdfを表示するようにしたら、解決しませんか???
mimamo

2019/01/23 02:19

なるほど!おっしゃるようにするとボタンが押せるようになりました! ありがとうございます!!
hameji001

2019/01/23 06:56

長らくかかりましたが、解決してよかったです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問