-
Notifications
You must be signed in to change notification settings - Fork 0
SwiftUI_ui_transition
画面遷移とは、次のページにいくことです。
アプリには必須ですね!
以下の簡単な構成を遷移前のページとしましょう。
import SwiftUI
struct ContentView: View {
var body: some View {
NavigationView {
Text("1 ページ目だよ")
.navigationBarTitleDisplayMode(.inline)
.navigationTitle("ページ1")
}
}
}
新しいファイルを作って、そこに遷移先のページを作りましょう!
右のファイルエリアを右クリック(Ctrl+左クリック)し、New File... を選択しましょう。
そのあとは、SwiftUI View を選択しましょう。
ファイルの名前を決めます。
NextView
とかにしておきましょう。
最後に、2ページ目の中身を作りましょう。
import SwiftUI
struct NextView: View {
var body: some View {
Text("2 ページ目だよ")
.navigationBarTitleDisplayMode(.inline)
.navigationTitle("ページ2")
}
}
タップした時に画面遷移したい要素を NavigationLink
で囲んであげます。
そして、NavigationLink(destination: 遷移先のView)
とすればOKです!
以下の例だと、Text
を囲んでいるので、Text
を押すと画面遷移するようになります。
import SwiftUI
struct ContentView: View {
var body: some View {
NavigationView {
NavigationLink(destination: NextView()) {
Text("1 ページ目だよ")
}
.navigationBarTitleDisplayMode(.inline)
.navigationTitle("ページ1")
}
}
}
※ navigationTitle
などの NavigationView
につけるオプションは NavigationView
内の最も外側の要素につけます。
さっきまで Text
につけていましたが、それを NavigationLink
という要素で囲んだため、そちらに移動させます。
さて、画面遷移が設定されたため、テキストの色が押せる感じに変わります。
しかし、この状態で押してもプレビュー上では画面遷移してくれません。というかそもそも押せません。
そんな時は、左上の再生ボタンのようなものを押してください。
これでプレビュー上で画面遷移が試せるようになりました!
以下のように、リストを押すと遷移するページを作りました。
struct ContentView: View {
let fruits = ["りんご", "バナナ", "スイカ"]
var body: some View {
NavigationView {
List(fruits, id: \.self) { fruit in
NavigationLink(destination: NextView()) {
Text(fruit)
}
}
.navigationBarTitleDisplayMode(.inline)
.navigationTitle("ページ1")
}
}
}
この時、次のページに押した fruit
を渡して表示させてみましょう。
以下のように、NextView
にイニシャライザを追加してあげます。
ここで fruit
を受け取るようにしましょう。
そして、受け取った fruit
を Text(fruit)
で表示されるようにします。
import SwiftUI
struct NextView: View {
let fruit: String
init(fruit: String) {
self.fruit = fruit
}
var body: some View {
Text(fruit)
.navigationBarTitleDisplayMode(.inline)
.navigationTitle("ページ2")
}
}
ここで、下のコードに以下のようなエラーが出ると思います。
この部分は、プレビューを描画する用のコードになります。
イニシャライザを追加したのに、値がありませんというエラーですね。
適当に以下のように追加してあげましょう。
struct NextView_Previews: PreviewProvider {
static var previews: some View {
NextView(fruit: "いちご")
}
}
さて、それでは ContentView
に戻りましょう。
そして NextView
の引数に fruit
を入れてあげましょう。
import SwiftUI
struct ContentView: View {
let fruits = ["りんご", "バナナ", "スイカ"]
var body: some View {
NavigationView {
List(fruits, id: \.self) { fruit in
NavigationLink(destination: NextView(fruit: fruit)) {
Text(fruit)
}
}
.navigationBarTitleDisplayMode(.inline)
.navigationTitle("ページ1")
}
}
}
完成です!