プログラミング

【Swift】UISegmentControlをコードで設定する

swift-eyecatch

UISegmentControlを使うことはまあまああるかと思いますが、正直あまりstoryboard上でポチポチ設定したくはないですよね。

レイアウトの配置はstroyboard上で行ったとしても、各セグメントなどはできればコードで行いたいです。

@IBOutlet weak var segmentControl: UISegmentedControl! {
    didSet {
        // 設定するセグメントの文字列を格納する[String]
        let titles = ["titleA", "titleB"]

        // storyboard上で設定されているセグメントを一旦全削除
        segmentControl.removeAllSegments()

        // titlesで作成した文字列でセグメントを設定
        for (i, title) in titles.enumerated() {
            segmentControl.insertSegment(withTitle: title, at: i, animated: false)
        }

        // 最初に選択されているセグメントを指定
        segmentControl.selectedSegmentIndex = 0

        // tintColorの設定
        segmentControl.tintColor = .blue

        // 背景色を設定
        segmentControl.backgroundColor = .yellow

        // 選択されているセグメントのTintColor
        segmentControl.selectedSegmentTintColor = .white

        // 選択されているセグメントの文字色
        segmentControl.setTitleTextAttributes( [.foregroundColor: UIColor.black], for: .selected)

        // 選択されていないセグメントの文字色
        segmentControl.setTitleTextAttributes( [.foregroundColor: UIColor.gray], for: .normal)
    }
}

こんな感じで諸々設定していきます。

人にもよりますが、UISegmentControlをstoryboard上に配置したら、outletで紐付けだけしておいて、あとはすべてコードで設定するのが楽でおすすめです。

ただ次は、storyboardを使わずにすべてコードだけでUIを作成するのもありかなと思っています。SwiftUI少し触ってみましたが、UIKitで表現出来ていたことが色々出来ないことが多く、本格的に手を出すのはまだ先かなというこの頃です。