見出し画像

【徒然iOS】気ままにUIKit79〜Navigation Bar 画面上部にタイトルとページ移動のボタンを設置〜

概要

このマガジンは四十を過ぎたおっさんが、

を参考にStoryboardでiOSアプリを完全に趣味で楽しんでいるだけな記事を気ままに上げてます。

今回

をハイ、レッツゴ🕺

前準備

念の為、

  1. バックアップ

  2. 新しいクラス

  3. ビューコントローラの追加

  4. イニシャルビューの変更

をいつも通りやってから本題へ💃

こんな感じかな💦

本題

ナビゲーションバーとは、

画面タイトルやページ移動のボタンを表示するために使われる入れ物
ナビゲーションバー単体ではなく、
ナビゲーションコントローラーを使うことの方が多い。

⒈新規ビューを二つ追加

適当にこんな感じで〜〜〜

⒉前準備で追加したビューにNavigationBarを配置

選んで〜〜〜
配置はしたけど見にくいので〜〜〜
白に戻す〜〜〜

⒊ナビゲーション内の左右にBar Button Itemを配置

選んで〜〜
ハイ、配置完了🕺

*この作業については、

以降、毎回やってるね👀

ポイント

ナビゲーションバーはタイトルやボタンを格納するためのプロパティは持っておらず、

ナビゲーションバーに設定するUINavigationItemクラスが
タイトルやボタンのプロパティを持っている。

てことらしい、、、ほうほう🥸

⒋ボタン名を変更して、セグエを繋ぐ

こんな感じかな🤔

⒌シミュレータで実行

起動〜〜〜
オレンジ〜〜〜
ミドリ〜〜〜

コードについて

今回のサイト記事のコード

//
//  ViewController.swift
//
import UIKit
class ViewController: UIViewController {
    //最初からあるメソッド
    override func viewDidLoad() {
        super.viewDidLoad()
    }
    //画面遷移実行前の呼び出しメソッド
    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        //ナビゲーションバーを作る。
        let navBar = UINavigationBar()
        navBar.frame = CGRectMake(0, 0, 320, 60)
        //ナビゲーションアイテムを作り、タイトルと左側ボタンを設定する。
        let navItem: UINavigationItem = UINavigationItem(title:segue.destinationViewController.title!)
        navItem.leftBarButtonItem = UIBarButtonItem(title:self.title!, style:UIBarButtonItemStyle.Plain, target:self, action:"action:")
        //ナビゲーションバーにナビゲーションアイテムを格納する。
        navBar.pushNavigationItem(navItem, animated:true)
        //遷移先のビューにナビゲーションバーを追加する。
        segue.destinationViewController.view.addSubview(navBar)
    }
    //ボタン押下時の呼び出しメソッド
    func action(sender:UIButton) {
        //モーダル表示されているビューコントローラーを解放する。
        self.dismissViewControllerAnimated(true,completion: nil)
    }
}

を参考に〜〜〜〜〜

class NavigationBarViewController: UIViewController {
    //最初からあるメソッド
    override func viewDidLoad() {
        super.viewDidLoad()
    }
    //画面遷移実行前の呼び出しメソッド
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        //ナビゲーションバーを作る。
        let navBar = UINavigationBar()
        navBar.frame = CGRectMake(0, 0, 320, 60)
        //ナビゲーションアイテムを作り、タイトルと左側ボタンを設定する。
        let navItem: UINavigationItem = UINavigationItem(title:segue.destination.title ?? "戻る")
        navItem.leftBarButtonItem = UIBarButtonItem(title:self.title, style:UIBarButtonItem.Style.plain, target:self, action:#selector(self.action(_:)))
        //ナビゲーションバーにナビゲーションアイテムを格納する。
        navBar.pushItem(navItem, animated:true)
        //遷移先のビューにナビゲーションバーを追加する。
        segue.destination.view.addSubview(navBar)
    }
    //ボタン押下時の呼び出しメソッド
    @objc func action(_ sender:UIButton) {
        //モーダル表示されているビューコントローラーを解放する。
        self.dismiss(animated: true,completion: nil)
    }
}

に書き換えて、実行してみると、、、

起動後〜〜〜
てな感じで〜〜〜
動きはするけど〜〜〜
で?どうしたん👀

て感じだね〜〜〜🤔

よく、コードでわざわざ

規則性があるから〜〜〜て管理しようとして、

デザインに失敗したり、
コードの書き振りが変わって解決に時間かかるようになったら

意味ないぞ👀
今回のコードは実際、
現在では、オプショナルバインディングなんかで、コードの制約がかなり強力になってるから、上記のコードで、⁇演算子を使わないとエラーになったからね〜〜〜〜正味、
何したいか
何故それをする必要があるのか
全くわからなかったからね

コード書かなくても出来ることはコードにやらせない方法を探すのもひとつ
👉カッコつけて、功名心からか知らないけど、
敢えてコードにして自滅する人をよく見る

サイト記事の内容は以上🕺

ブラッシュアップ

もかねて〜〜〜いつもどおりのブラッシュアップ🕺

AutoLayoutのpin制約〜〜〜
WEBリンク用のボタン追加〜〜〜
アクション接続して〜〜〜
コード追加〜〜〜

記事公開後、

ハイ、完了🕺

Apple公式

さて、次回は

なんだけど、

やってる作業をコードなんで、
ちょっと昨日やったセグエのところで気になるところもあるし、記事の内容にも関連するので、それを踏まえながら、ちょっと今までのビューの手直ししてく〜〜〜🕺

いいなと思ったら応援しよう!