🐥

UIViewController

2024/04/25に公開

🤔やってみたいこと

https://developer.apple.com/documentation/uikit/uiviewcontroller

趣味で、SwiftUIを勉強しているのですが、UIKitが必要な場面もあって時々勉強してます。UIViewControllerを昔使ったことあるのですが、これが何かよくわかっておりません。StoryBoardでプロジェクトを作って、この中にコードを書くと、UIを作ったり別のページのUIを表示することができるようです。

なので色々と試してみようと思いました。

UIViewControllerとは何か?

UIViewControllerはiOSのUIKitフレームワークに含まれるクラスで、アプリケーションのユーザーインターフェースの一部を管理します。それぞれのUIViewControllerインスタンス(通常は「ビューコントローラ」と呼ばれます)は、アプリケーションの画面の一部を制御します。

ビューコントローラは以下のような役割を果たします:

ユーザーインターフェースの表示と管理
ユーザーからの入力の処理
データとユーザーインターフェースの間の連携
画面間の遷移の管理
デバイスの向きの変更やキーボードの表示など、システムイベントの応答
ビューコントローラは、そのライフサイクルの間に発生するさまざまなイベントを通知するメソッドを提供します。例えば、viewDidLoad()はビューコントローラのビューがメモリにロードされた後に呼び出されます。これらのメソッドをオーバーライドすることで、これらのイベントに対するカスタムの動作を定義することができます。

🚀やってみたこと

以前は、StoryBoardの設定ファイルを削除して、UIKitのコードを表示していたのですが、やらなくてもできるようです?



ViewController.swiftのコードを修正してビルドすると、Hello Worldと表示されます!

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
            super.viewDidLoad()

            let label = UILabel()
            label.text = "Hello World"
            label.textAlignment = .center
            label.translatesAutoresizingMaskIntoConstraints = false
            view.addSubview(label)

            NSLayoutConstraint.activate([
                label.centerXAnchor.constraint(equalTo: view.centerXAnchor),
                label.centerYAnchor.constraint(equalTo: view.centerYAnchor)
            ])
        }


}

Cocoa Touch Classを使ってみる

別ページにUIを作成するときに、Cocoa Touch Classというものを使います。どんなものかというと、

Cocoa Touchは、iOSを使用しているスマートフォンで動くフレームワークである。
Cocoa Touchは、Objective-CのFoundationフレームワークの上に、iOSの固有機能をまとめたUIKitというフレームワークを搭載している。

参考になったサイト
https://note-tmk.hatenablog.com/entry/2023/10/08/113449

https://ja.wikipedia.org/wiki/Cocoa_Touch

command + N を押すと、新しいファイルを作成することができるので、Cocoa Touch Classを選択して、UIViewControllerを作成します。



作成したファイルには、赤いカラーボックスを表示するコードを書いてます。これをViewController.swiftで表示します。

import UIKit

class ColorBoxViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()

        let colorBox = UIView()
        colorBox.backgroundColor = .red // ここで任意の色を設定します
        colorBox.translatesAutoresizingMaskIntoConstraints = false
        view.addSubview(colorBox)

        NSLayoutConstraint.activate([
            colorBox.centerXAnchor.constraint(equalTo: view.centerXAnchor),
            colorBox.centerYAnchor.constraint(equalTo: view.centerYAnchor),
            colorBox.widthAnchor.constraint(equalToConstant: 100), // ボックスの幅
            colorBox.heightAnchor.constraint(equalToConstant: 100) // ボックスの高さ
        ])
    }
}

最初に表示するページを設定するViewController.swiftで、カラーボックスのクラスを呼び出して、表示するには、このような設定をします。

import UIKit

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()

        let colorBoxVC = ColorBoxViewController()
        self.addChild(colorBoxVC)
        colorBoxVC.view.frame = self.view.bounds
        self.view.addSubview(colorBoxVC.view)
        colorBoxVC.didMove(toParent: self)
    }
}

ビルドすると、コードだけでUIを作ることができました。StoryBoardだとお絵描きするようなあのやり方好きでないので、コードで作りたいですね。

🙂最後に

今回は、UIViewControllerについて学習してみました。どんなものだったかまとめると、

  1. ユーザーインターフェースの表示と管理
  2. ユーザーからの入力の処理
  3. データとユーザーインターフェースの間の連携
  4. 画面間の遷移の管理
  5. デバイスの向きの変更やキーボードの表示など、システムイベントの応答

Cocoa Touch Classも久しぶりに使いましたがこれは、iOSを使用しているスマートフォンで動くフレームワークでした。

Discussion