Storyboard上のNavigationBarのTitleを変更する【Swift】

やっとわかった。Swift始めてもうそこそこたったのにこれだけはなかなか解決できず・・・。

 

基本的にあんまりStoryboardを使わない人なんですが、NavigationBarとSegueに関してだけは使っていて、あんまり使わないからこそなかなか覚えも悪いと・・・。

 

Storyboard上に配置したNavigationBarのタイトルを変更したい時ですが、基本は

スクリーンショット-2016-03-09-10.21.32

 

ここにタイトルを書きますよね。

しかしこのタイトルを場合分けして変更したい!ってこともあると思います。

ちょっと色々あって見難いですが、storyboardを開いた状態で、右上の丸が2つ重なっているマークを押します

 

スクリーンショット-2016-03-09-10.28.57

すると2画面になるので、そこから右側の画面を変更する時は altを押しながら、対象のViewControllerファイルを開きましょう

次にcontrolを押しながらNavigationBarのタイトルをつけた方をみょーんと引っ張ってきて、Outletで繋げます

スクリーンショット-2016-03-09-10.46.28

(ここにきてちょっと別のプロジェクトの画面で申し訳ないです・・・)

 

そして繋げた後は、viewDidLayoutSubviewsをoverrideして変更します。

override func viewDidLayoutSubviews(){
        super.viewDidLayoutSubviews()
        navigationBar.title = "タイトル変更"
}

 

わりと初歩的なことかもですが、なかなか変更できなくてずっともやもやしてました。

 

ちなみにこのviewDidLayoutSubviewsはStoryboard上のものが配置された後に呼び出されるものです。

viewDidLoadに書いてしまってもいいかなとも思いますが、念のためにこっちに書いてます。。

 

おまけ

上記のと同様な手順で、Storyboard上に配置したNavigationBarの閉じるボタンを非表示にしたり、文字を変えたりしました。

文字は同様にして変更できます。

UINavigationBarItemにはhiddenがありませんので、非表示にする場合は

//closeBtnという閉じるボタンを非表示にする
closeBtn.title = ""
closeBtn.enabled = false

//文字色をクリアにする場合
closeBtn.tintColor = UIColor.clearColor()
closeBtn.enabled = false

titleの文字を消して、タッチを許可しないようにする方法と

titleの文字色を透明にして見えなくして、タッチを許可しないようにする方法

のどちらでも可能です。

 

storyboardももっとちゃんと活用しなきゃなぁ・・・

2018/04/14追記 Swift4で
UINavigationBarにtitleっていうのはないですね
UINavigationItemの方を持って来ましょう。

@IBOutlet weak var naviItem: UINavigationItem!
なんでコード上でタイトル変える必要あったんだろうって気にはなりましたがw
naviItem.leftBarButtonItem?.isEnabled = false
isHiddenがないのでisEnabled使うと良いそうです。 今じゃほぼ完全にStoryBoard使わないマンになってしまいました。
コメントは認証制です。詳しくは下記の注意をお読みください。お気軽にコメントお願いします!

Write a Comment

コメント時の注意

「Twitter」「Facebook」「Google+」「WordPress」のいずれかのアカウントをお持ちの方は各アカウントと連携することでコメントできます。 コメントしたことはSNSに流れませんので、アカウントをお持ちの方はこちらの方法でコメントを投稿して下さると嬉しいです。 アカウントをお持ちでない方はメールアドレスで投稿することができます。 初回コメント時は承認後に表示されます。

Related Memo...

UINavigationController + UIScrollView の組み合わせで使っている時に謎の余白ができる時

UINavigationController + UIScrollView の組み合わせで使っていて、UIScrollView 上に AutoLayout で上下左右0で View を設置しているのに、30px程度上にずれてしまうとき。

`navigationController.navigationBar.isTranslucent = false` にすると直るかもしれない。

ScrollView上のコンテンツとNavigationBarの重なっているところが透過していたら多分これで直せるはず。

通常のターゲットではちゃんと動いているのに、iOSSnapshotTestCase を用いたテストでだけこの対応が必要なのよくわからないけれど。。。

iOS

UITableView.RowAnimation の .none はアニメーションするよ

UITableView.RowAnimation の .none はアニメーションがnoneなわけじゃなく、デフォルトの設定を使うよという意味らしい。

The inserted or deleted rows use the default animations.

なのでアニメーションしちゃう。今更の気づき。

 

iOS

記事を書くほどでもないけれどメモっておきたいこと

テスト投稿。

例えばiphone7 の画面サイズ

750 × 1334
半分375 × 667

iOS
more