- Today
- Total
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- Request
- struct
- Python
- HTTP
- r
- 시각화
- Observable
- 명령어
- deeplearning
- sigmoid
- 오블완
- MVC
- rxswift
- barplot
- rest api
- cocoapods
- SWIFT
- tapply
- swiftUI
- 티스토리챌린지
- decode
- Optional
- SQL
- substr
- Linux
- 연산자
- ios
- scheduledTimer
- 딥러닝
- ReLU
iOS 개발 기록 블로그
[SwiftUI] @ToolbarContentBuilder로 가독성 개선 본문
🧑💻 코드
import SwiftUI
public struct SampleView: View {
@State var title: String = "Hi, guys"
@Environment(\\.presentationMode) var presentationMode: Binding
public var body: some View {
VStack {
Text(title)
.font(.system(size: 26, weight: .bold))
.foregroundColor(.black)
.padding()
NavigationLink {
BaseWebView(url: "<https://www.google.com>")
} label: {
Text("구글 웹사이트")
.padding()
}
Spacer()
}
.navigationBarTitleDisplayMode(.inline)
.navigationBarBackButtonHidden()
.toolbar {
toolbarContent()
}
}
@ToolbarContentBuilder
private func toolbarContent() -> some ToolbarContent {
ToolbarItem(placement: .principal) {
Text("Download")
}
ToolbarItem(placement: .navigationBarLeading) {
backButton
}
ToolbarItem(placement: .navigationBarTrailing) {
actionButtons
}
}
private var backButton: some View {
Image(systemName: "chevron.backward")
.padding(.horizontal, 8)
.onTapGesture {
self.presentationMode.wrappedValue.dismiss()
}
}
private var actionButtons: some View {
HStack(spacing: 0) {
Image(systemName: "dot.radiowaves.left.and.right")
.padding(.horizontal, 8)
.onTapGesture {
title = "라디오 버튼 선택함"
}
Image(systemName: "heart.fill")
.padding(.horizontal, 8)
.onTapGesture {
title = "하트 버튼 선택함"
}
}
}
}
@ToolbarContentBuilder
https://developer.apple.com/documentation/swiftui/toolbarcontentbuilder
ToolbarContentBuilder | Apple Developer Documentation
Constructs a toolbar item set from multi-expression closures.
developer.apple.com
some ToolbarContent를 return하는 메서드를 만들어서 View의 body 아래 부분의 가독성을 개선해줄 수 있음
추가 설명
@ToolbarContentBuilder는 SwiftUI에서 툴바 컨텐츠를 구성할 때 사용하는 특별한 빌더입니다. SwiftUI는 다양한 뷰를 조합하여 사용자 인터페이스를 구축하는 선언적 프레임워크이며, @ToolbarContentBuilder는 이러한 패러다임을 툴바 컨텐츠의 구성에 적용합니다. @ToolbarContentBuilder를 사용하면 복잡한 툴바를 보다 구조적이고 선언적인 방식으로 정의할 수 있습니다.
Usage
@ToolbarContentBuilder는 함수나 계산된 변수 앞에 붙는 속성(어트리뷰트)입니다. 이를 사용하면 여러 툴바 아이템을 그룹화하여 한 번에 반환할 수 있습니다. SwiftUI는 이 어트리뷰트가 붙은 함수나 변수 내부에서 생성된 모든 툴바 아이템을 자동으로 인식하고, 이를 툴바로 구성합니다.
.toolbar {
toolbarContent()
}
- 툴바 아이템(ToolbarItem): 툴바에 표시될 개별 요소를 정의합니다. 각 ToolbarItem은 placement 매개변수를 통해 툴바 내의 위치를 지정할 수 있습니다.
- 배치(Placement): 툴바 아이템이 툴바 내에서 어디에 배치될지 결정합니다. 예를 들어, .navigationBarLeading, .navigationBarTrailing, .principal 등이 있습니다.
- ToolbarContentBuilder: 이 어트리뷰트는 컴파일러에게 여러 툴바 아이템을 조합하여 하나의 툴바 컨텐츠로 구성하도록 지시합니다. 이는 복잡한 툴바 구성도 간결하고 선언적인 코드로 표현할 수 있게 해줍니다.
@ToolbarContentBuilder를 사용함으로써, SwiftUI 앱의 툴바를 효율적으로 관리하고, 다양한 툴바 아이템을 유연하게 조합하여 사용자에게 필요한 인터페이스를 제공할 수 있습니다.
'iOS > SwiftUI' 카테고리의 다른 글
[SwiftUI] 네비게이션바 알 수 없는 여백 없애버리기 (0) | 2024.03.13 |
---|---|
[SwiftUI] .navigationBarBackButtonHidden() 처리 후 PopSwipeGesture 버그 수정하기 (0) | 2024.03.12 |
[SwiftUI] @Environment(\.presentationMode) 사용해서 간편하게 View dismiss 하기 (0) | 2024.03.11 |
SwiftUI Button의 Background가 클릭되지 않는 경우 (0) | 2023.07.31 |