4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

SwiftUIを使って一覧ページ(リスト表示)を簡単に作ってみよう

Last updated at Posted at 2020-04-29
1 / 27

今回のお題


これまでstoryboardを触ったことはありますが、ほぼswift初心者なワタクシ。。。
久しぶりにxcodeを開いたらSwiftUIという機能があったので触ってみました。

2019年に出ていたらしいけど、アプリ関係は疎いので全然知らなかった。。。


準備(xcode起動からプロジェクト作成まで)


スクリーンショット 2020-04-26 21.23.38.png

「Create a new Xcode project」を選択


スクリーンショット 2020-04-26 21.27.10.png

「Single View APP」を選択しNext


スクリーンショット 2020-04-26 21.27.42.png

Product Nameを入力します。
今回はbaseballとしました。


スクリーンショット 2020-04-26 21.28.10.png

プロジェクトを作成し、この画面が表示されます。
上部にあるResumeボタンをクリックするとビルドを始めて。。。


スクリーンショット 2020-04-26 21.29.22.png

プレビューとしてこれが出る!
なるほど!
それでは少し触ってみることにします。


textを増やす


このままText("Hello, world")をコピペすると。。。

スクリーンショット 2020-04-29 23.01.09.png

おうふ。。。


なので、「command⌘キー」を押しながらソースコードのTextをクリックしてポップアップを表示します。

スクリーンショット 2020-04-26 23.09.59.png

今回は縦に表示をさせたいので
「Embed in VStack」を選択します。


スクリーンショット 2020-04-29 23.04.43.png

Text("Hello, world")を増やすと。。


スクリーンショット 2020-04-26 23.10.36.png

これでようやくtextを増やすことができました。
当たり前ですが、増やした分だけ表示されますね笑
次は"Hello, world"を書き換えて、そのまま色もつけてみましょうか。


テキストに色をつける


「command⌘キー」を押しながらプレビューのラベルをクリックするとポップアップが表示されます。
「Show SwiftUI Inspector...」を選択すると。。


スクリーンショット 2020-04-26 23.11.12.png

フォントや色を変えられますね。
今回はCustomを選択、それぞれ色を設定しました。


スクリーンショット 2020-04-26 23.22.45.png

ここまで表示できるようになりました。
swiftのRGB値を使った色指定は256段階ではなく、0〜1.00の間で設定するので
255で割った値が入るようにちょいと面倒な書き方としています。


リスト表示


このまま文字列を縦に表示しているだけでは使いづらいので、リストにしましょう。
「command⌘キー」を押しながらソースコードのVStackをクリックしてポップアップを表示し
「Embed in List」を選択します。


スクリーンショット 2020-04-29 23.13.09.png

あらら、、これはクドいw
リストを使えるようにコードを以下のように書き換えました。


ContentView.swift
import SwiftUI

struct Team: Identifiable {
    var id: Int
    var name: String
    var colorRed: Double
    var colorGreen: Double
    var colorBlue: Double
}


struct ContentView: View {
    let teams: [Team] = [
        Team(id: 1, name: "北海道", colorRed: 2 / 255, colorGreen: 81 / 255, colorBlue: 140 / 255),
        Team(id: 2, name: "宮城", colorRed: 133 / 255, colorGreen: 1 / 255, colorBlue: 15 / 255),
        Team(id: 3, name: "埼玉", colorRed: 16 / 255, colorGreen: 41 / 255, colorBlue: 97 / 255),
        Team(id: 4, name: "千葉", colorRed: 34 / 255, colorGreen: 24 / 255, colorBlue: 21 / 255),
        Team(id: 5, name: "大阪", colorRed: 176 / 255, colorGreen: 143 / 255, colorBlue: 50 / 255),
        Team(id: 6, name: "福岡", colorRed: 242 / 255, colorGreen: 202 / 255, colorBlue: 0 / 255),
    ]

    var body: some View {
        List(teams) { team in
            Text(team.name)
                .foregroundColor(Color(red: team.colorRed, green: team.colorGreen, blue: team.colorBlue))
        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

その結果。。。


スクリーンショット 2020-04-29 23.17.35.png

それらしく表示されるようになりましたね!
これだけでは寂しいので、もう少し表示内容を増やしてみましょう。


画像の追加


Assets.xcassetsに使いたい画像をドロップします。

スクリーンショット 2020-04-30 1.55.03.png

画像を反映させます。

ContentView.swift
import SwiftUI

struct Team: Identifiable {
    var id: Int
    var name: String
    var name_en: String
    var colorRed: Double
    var colorGreen: Double
    var colorBlue: Double
}


struct ContentView: View {
    let teams: [Team] = [
        Team(id: 1, name: "北海道", name_en: "hokkaido", colorRed: 2 / 255, colorGreen: 81 / 255, colorBlue: 140 / 255),
        Team(id: 2, name: "宮城", name_en: "miyagi", colorRed: 133 / 255, colorGreen: 1 / 255, colorBlue: 15 / 255),
        Team(id: 3, name: "埼玉", name_en: "saitama", colorRed: 16 / 255, colorGreen: 41 / 255, colorBlue: 97 / 255),
        Team(id: 4, name: "千葉", name_en: "chiba", colorRed: 34 / 255, colorGreen: 24 / 255, colorBlue: 21 / 255),
        Team(id: 5, name: "大阪", name_en: "osaka", colorRed: 176 / 255, colorGreen: 143 / 255, colorBlue: 50 / 255),
        Team(id: 6, name: "福岡", name_en: "fukuoka", colorRed: 242 / 255, colorGreen: 202 / 255, colorBlue: 0 / 255),
    ]

    var body: some View {
        List(teams) { team in
            Image(team.name_en)
                .resizable()
                .scaledToFit()
                .frame(width: 32.0, height: 32.0)
            Text(team.name)
                .foregroundColor(Color(red: team.colorRed, green: team.colorGreen, blue: team.colorBlue))
            Text(team.name_en)
                .foregroundColor(Color(red: team.colorRed, green: team.colorGreen, blue: team.colorBlue))
        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

Teamsにname_enという変数を追加し、画像名と合わせています。
これでプレビューはこんな感じ。


スクリーンショット 2020-04-30 2.00.39.png

列をタップした際にページ遷移する処理などは
またの機会に書けたらと思います。

4
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?