はじめに
【SwiftUI】セクションごとに分けてListを表示する - Swift・iOSの続きです。今回はListからNavigationLinkを使って画面遷移する実装を試したので記事に残します。
開発環境
- macOS Big Sur 11.2.3
- Xcode 12.4
- Swift 5.3.2
サンプルイメージ
実装
SettingView.swift
import SwiftUI struct SettingView: View { struct SettingTitle: Hashable, Identifiable { var id = UUID() var title : String } struct Setting: Identifiable { var id = UUID() var header: String var settingTitles: [SettingTitle] } var settings: [Setting] = [ Setting(header: "ブックマーク", settingTitles: [SettingTitle(title: "編集")]), Setting(header: "その他", settingTitles: [SettingTitle(title: "プライバシーポリシー"), SettingTitle(title: "ライセンス"), SettingTitle(title: "バージョン")]) ] var body: some View { NavigationView { VStack(alignment: .leading) { List { ForEach(settings) { setting in Section(header: Text(setting.header)) { ForEach(setting.settingTitles) { titles in NavigationLink( destination: SampleView(text: titles.title), label: { Text(titles.title) }) } } } } .listStyle(InsetGroupedListStyle()) .navigationTitle("設定") } } } }
SampleView.swift
import SwiftUI struct SampleView: View { var text: String var body: some View { Text("設定画面の\"\(text)\"から画面遷移した") } } struct SampleView_Previews: PreviewProvider { static var previews: some View { SampleView(text: "test") } }
SceneDelegate.swift
実際にサンプルコードを動かしてみたい場合は、SceneDelegate.swiftの"scene(_:willConnectTo:options:)"を以下のように変更してください。
おわりに
NavigationLinkではなくモーダルビューで画面遷移する方法も試したので、また別途記事にしようと思います。