【SwiftUI】NavigationView의 기본적인 사용법(전편)

9774 단어 XcodeiOSSwiftSwiftUI
지난번에 계속해서 앱에 사용한 기술을 출력해 갑니다.
해설하는 내 앱은 여기.
이해 - 공부 지원 앱 -

NavigationView



계층적 화면 전환을 관리하는 뷰.

공식 참조

NavigationLink



NavigationView 내에서, 화면 천이를 실시하는 트리거가 되는 뷰와 천이처의 뷰의 양쪽 모두를 지정할 수 있는 뷰. NavigationView와 세트로 사용한다.

공식 참조

실제 동작



※확장 추천



동영상 포인트



  • NavigationView의 외부 영역은 전환되지 않고 전환 대상에도 표시됩니다. (동영상의 도움말 버튼)
  • 전환 대상 화면의 왼쪽 상단에는 이전 화면으로 돌아가는 버튼이 표시됩니다.
  • 돌아오는 버튼에는 타이틀이 그대로 쓰여진다.


코드



이번에 작성한 샘플 앱의 소스 코드는 여기



먼저 최상위 계층에서 살펴보겠습니다.




ContentView.swift

import SwiftUI

struct ContentView: View {

    let regions = ["カントー地方", "ジョウト地方", "ホウエン地方", "シンオウ地方"]

    var body: some View {
        VStack{
            // ここから
            HStack{
                Spacer()
                Button(action: {}, label: {
                    Text("ヘルプ")
                })
            }
            .padding(.horizontal)
            // ここまではNavigationViewに含まれない

            //ここから
            NavigationView {
                List(0..<4) { n in
                    NavigationLink(regions[n], destination: Region(id: n, regionName: regions[n]))
                }
                .navigationTitle("そらをとぶ")
            }
            //ここまでがNavigationViewの領域
        }
    }
}



기본적으로 전환(전환)은 NavigationView의 {}에 있는 요소뿐입니다. 위 소스 코드의 '도움말'이라는 버튼은 NavigationView에 포함되지 않으므로 링크를 탭해도 전환하지 않고 화면 상단에 남아 있습니다(동영상 확인). 이번 '도움말' 버튼과 같이 어떤 이유로 전환 대상에도 계속 표시하고 싶은 것이 있다면 NavigationView에 포함하지 않는 것이 좋습니다.



다음으로 NavigationView를 살펴보겠습니다.



NavigationView 안에는 NavigationLink가 쓰여져 있으며, List의 반복 처리로 4개 늘어놓도록 하고 있습니다. 위에서 설명한 것처럼 NavigationLink는 화면 전환의 트리거와 전환 대상의 뷰를 지정할 수 있습니다. 이번에는 regions[n] (배열 regions의 n 번째 요소)가 트리거되고 Regionビュー가 전환 대상입니다.



Region 뷰 소스 코드는 여기.




Region.swift

import SwiftUI

struct Region: View {

    let id: Int //地方によって表示を変えるためのプロパティ
    let regionName: String //地方の名前をタイトルにするためのプロパティ

    var body: some View {
        //NavigationViewは書かない
        List(0..<4) { n in
            NavigationLink(regionsArray[id][n], destination: Flight(city: regionsArray[id][n]))
                .navigationTitle(regionName)
        }
    }
}

//各地方ごとのデータ
let kanto = ["マサラタウン", "トキワシティ", "ニビシティ", "ハナダシティ"]
let joto = ["ワカバタウン", "ヨシノシティ", "キキョウシティ", "ヒワダタウン"]
let hoen = ["ミシロタウン", "コトキタウン", "トウカシティ", "カナズミシティ"]
let shino = ["フタバタウン", "マサゴタウン", "クロガネシティ", "コトブキシティ"]

//idに対応する配列を取り出すための配列
let regionsArray = [kanto, joto, hoen, shino]



여기서 보는 것은 NavigationLink가 있지만 NavigationView에 대한 설명이 어디에도 쓰여지지 않는다는 것입니다. NavigationView는 최상위 계층이 되는 뷰에 쓰는 것만으로, 전환처에도 기능을 갖게 할 수 있습니다.



반대로 아래의 계층구조에도 NavigationView를 작성하고 다음 화면으로 전환하면 이와 같이 됩니다.





화면 왼쪽 상단에 이전 화면으로 돌아가는 두 개의 버튼이 늘어서 있다고 생각합니다. 이것은 NavigationView에서 NavigationView를 만드는 것으로 결정된 결과입니다. 이와 같이 표시하고 싶은 경우는 별도입니다만, 기본은 맨 위의 계층구조에만 NavigationView 를 쓰는 것을 추천합니다.



다음 번에는 navigationTitle에 대해 씁니다.



참고문헌



SwiftUI 철저 입문 가네다 히로아키 (저) ([주의]Xcode12 비대응의 것입니다)


좋은 웹페이지 즐겨찾기