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

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

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

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

Q&A

1回答

1420閲覧

NavBarTitleのタッチ

sam3457

総合スコア52

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

0グッド

0クリップ

投稿2018/04/23 07:27

こちらを参考にコードのみのアプリを作っています。

以下の処理はnavigationbarにアイコン画像と名前を表示し、そこをタッチすると画面遷移するというものです。

addGestureRecognizerでタップ処理を追加しています。(コード下部)

しかし、画像の様にnavigationbarに画像と名前は表示されるものの、タッチが効かない状況です。
イメージ説明

よく、isUserInteractionEnabledがtrueになっていないことが原因の場合をよく見るのでそれも追加して見ましたがやはりタップできませんでした。

また#selectorで指定したメソッドにprint("1")を追加して見たのですが(表示されなかったので)そのメソッド自体呼ばれていませんでした。

もしわかる方がいらっしゃいましたらよろしくお願いいたします。

足りない部分がありましたら指摘していただけると幸いです。

swift

1 2 func setupNavBarWithUser(user: User) { 3 4 let titleView = UIView() 5 titleView.frame = CGRect(x: 0, y: 0, width: 100, height: 40) 6 7 let containerView = UIView() 8 containerView.translatesAutoresizingMaskIntoConstraints = false 9 titleView.addSubview(containerView) 10 11 let profileImageView = UIImageView() 12 profileImageView.translatesAutoresizingMaskIntoConstraints = false 13 profileImageView.contentMode = .scaleAspectFill 14 profileImageView.layer.cornerRadius = 20 15 profileImageView.clipsToBounds = true 16 if let profileImageUrl = user.profileImageUrl { 17 profileImageView.loadImageUsinggCacheWithUrlString(urlString: profileImageUrl) 18 } 19 20 containerView.addSubview(profileImageView) 21 22 //ios 9 constraint anchors 23 //need x,y,width,height anchors 24 profileImageView.leftAnchor.constraint(equalTo: containerView.leftAnchor).isActive = true 25 profileImageView.centerYAnchor.constraint(equalTo: containerView.centerYAnchor).isActive = true 26 profileImageView.widthAnchor.constraint(equalToConstant: 40).isActive = true 27 profileImageView.heightAnchor.constraint(equalToConstant: 40).isActive = true 28 29 let nameLabel = UILabel() 30 31 containerView.addSubview(nameLabel) 32 nameLabel.text = user.name 33 nameLabel.translatesAutoresizingMaskIntoConstraints = false 34 35 //need x,y,width,height anchors 36 nameLabel.leftAnchor.constraint(equalTo: profileImageView.rightAnchor, constant: 8).isActive = true 37 nameLabel.centerYAnchor.constraint(equalTo: profileImageView.centerYAnchor).isActive = true 38 nameLabel.rightAnchor.constraint(equalTo: containerView.rightAnchor).isActive = true 39 nameLabel.heightAnchor.constraint(equalTo: profileImageView.heightAnchor).isActive = true 40 41 containerView.centerXAnchor.constraint(equalTo: titleView.centerXAnchor).isActive = true 42 containerView.centerYAnchor.constraint(equalTo: titleView.centerYAnchor).isActive = true 43 44 self.navigationItem.titleView = titleView 45 titleView.isUserInteractionEnabled = true 46 titleView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(showChatController))) 47 } 48 49 @objc func showChatController() { 50 print("1") 51 let chatLogController = ChatLogController() 52 navigationController?.pushViewController(chatLogController, animated: true) 53 54 }

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

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

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

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

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

guest

回答1

0

titleViewをNavigationItemにセットしてから制約を付けて下さい。

swift

1let titleView = UIView() 2titleView.backgroundColor = .orange 3titleView.frame = CGRect(x: 0, y: 0, width: 100, height: 40) 4self.navigationItem.titleView = titleView //←ここに移動 5 :

制約はaddSubViewしてから付ける、ということです。
あと、containerViewの制約付けていませんが大丈夫でしょうか?

ちなみに、Consoleに制約のエラーが表示されているはずです。
まずエラーの対処をしましょう。

投稿2018/04/23 07:50

編集2018/04/24 00:56
fuzzball

総合スコア16731

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

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

sam3457

2018/04/23 11:41

回答ありがとうございます! 途中に profileImageView.isUserInteractionEnabled = true と、追加して試してみましたがタップはできませんでした。
fuzzball

2018/04/24 00:56

回答を更新しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問