swift 복습

TabView

섭섭's 2024. 8. 4. 17:13

TabView 는 탭 기반의 사용자 인터페이스를 구성하는데 사용하는 뷰 입니다.

여러개의 다른 화면을 탭으로 전환하여 제공할 수 있습니다.

 

구성요소

탭 아이템 : 각 탭은 특정 화면을 나타냅니다. 일반적으로는 아이콘과 레이블이 포함됩니다.

탭 뷰: 여러 개의 탭을 포함하는 컨테이너 뷰 입니다.

 

간단한 사용법

코드가 사진하나에 안담기기 때문에 코드블럭을 사용겠습니다.

 

import SwiftUI

struct ContentView: View {
    var body: some View {
        TabView {
            HomeView()
                .tabItem {
                    Image(systemName: "house")
                    Text("홈")
                }
            
            SettingsView()
                .tabItem {
                    Image(systemName: "gear")
                    Text("설정")
                }
            
            ProfileView()
                .tabItem {
                    Image(systemName: "person")
                    Text("프로필")
                }
        }
    }
}

struct HomeView: View {
    var body: some View {
        Text("홈 화면")
    }
}

struct SettingsView: View {
    var body: some View {
        Text("설정 화면")
    }
}

struct ProfileView: View {
    var body: some View {
        Text("프로필 화면")
    }
}
#Preview {
    ContentView()
}

 

 

 

 

해당 프리뷰 예제와 같이 화면 아래의 네비게이션 바를 눌면 

각각에 해당하는 화면이 나오게 됩니다.

 

TabView: 여러개의 자식 뷰를 포함합니다. 자식 뷰들은 탭으로 표시되게 됩니다.

 

tabItem : 각 뷰에 대해 tabItem 수정자를 사용하여 탭의 아이콘과 레이블을 정의합니다.

 

자식 뷰 : HomeView,SettingView, PreofileView 는 각 탭에서 표시되는 뷰 입니다. 

각각의 화면 내용을 정의합니다.

 

응용

import SwiftUI

struct ContentView: View {
    var body: some View {
        TabView {
            HomeView()
                .tabItem {
                    Image(systemName: "house")
                    Text("홈")
                }
            
            SettingsView()
                .tabItem {
                    Image(systemName: "gear")
                    Text("설정")
                }
            
            ProfileView()
                .tabItem {
                    Image(systemName: "person")
                    Text("프로필")
                }
        }
    }
}

struct HomeView: View {
    var body: some View {
        NavigationView {
            List {
                ForEach(1...10, id: \.self) { index in
                    NavigationLink(destination: DetailView(item: index)) {
                        Text("섭섭블로그 \(index)")
                    }
                }
            }
            .navigationTitle("홈")
        }
    }
}

struct DetailView: View {
    var item: Int
    
    var body: some View {
        VStack {
            Text("상세 정보")
                .font(.largeTitle)
            Text("아이템 번호: \(item)")
                .font(.title)
        }
        .padding()
    }
}

struct SettingsView: View {
    @State private var notificationsEnabled: Bool = true
    
    var body: some View {
        Form {
            Section(header: Text("알림 설정")) {
                Toggle("알림 켜기", isOn: $notificationsEnabled)
            }
            Section(header: Text("정보")) {
                Text("섭섭의 복습블로그")
            }
        }
        .navigationTitle("설정")
    }
}

struct ProfileView: View {
    @State private var name: String = "사용자 이름"
    
    var body: some View {
        VStack {
            Text("프로필")
                .font(.largeTitle)
            TextField("이름을 입력하세요", text: $name)
                .textFieldStyle(RoundedBorderTextFieldStyle())
                .padding()
            Text("현재 이름: \(name)")
                .padding()
        }
        .padding()
    }
}

#Preview {
    ContentView()
}

 

각각의 자식 뷰 안쪽에 특정한 기능들을 넣은 소스코드 입니다.

 

 

 

'swift 복습' 카테고리의 다른 글

Combine의 개념  (0) 2024.10.06
MVVM 디자인 패턴  (0) 2024.09.22
ScrollView  (0) 2024.08.04
List , form  (0) 2024.08.04
Stack  (0) 2024.08.04