[iOS 8] ナビゲーションバーのタイトルタップを検知する

2014.09.24

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

ナビゲーションバーのタイトルタップを検知する

情報があまりなかったので共有。
ハマりポイントは以下のとおり。

  • UILabel の userInteractionEnabled はデフォルト false

サンプルコード

// タイトルを表示するラベルを作成
let label = UILabel()
label.text = "Title"
label.sizeToFit()

// タップジェスチャーを設定
let gestureRecognizer = UITapGestureRecognizer(target: self, action: "tapped:")
label.addGestureRecognizer(gestureRecognizer)

// チクショー
label.userInteractionEnabled = true

// ナビゲーションバーの titleView に上で作成したラベルを設定
navigationItem.titleView = label

タイトルタップ時に呼ばれるメソッド

func tapped(tapGestureRecognizer: UITapGestureRecognizer) {
    println("tapped.")
}

まとめ

ナビゲーションバー自体にタップジェスチャーを設定することもできますが、それだと「戻る」ボタンを押してもジェスチャーで設定しているアクションが優先されるので、こちらのほうがいいと思います。
フォントなどは適宜調整してください。