iOS/App

Scrumdinger 분석하기 02-2. /scrum/ScrumsView.swift

태애니 2025. 4. 17. 17:26
728x90

Big Idea (큰 주제)

- 코드분석

Essential Question (핵심 질문)

- Scrumdinger 에서 해당 코드를 쓴 이유에 대해 나는 잘 이해하고 있을까?

Challenge (도전 과제)

- 하나의 뷰에서 내가 모르는 코드에 대해 분석해보자

 

 



Activities (학습 활동)

다시...🥹또 시간 조절을 못하고 있다.

 

일단 정리!!

 

 

import SwiftUI
import SwiftData

struct ScrumsView: View {
    @Query(sort: \DailyScrum.title) private var scrums: [DailyScrum]
    @State private var isPresentingNewScrumView = false
    
    var body: some View {
        NavigationStack {
            List(scrums) { scrum in
                NavigationLink(destination: DetailView(scrum: scrum)) {
                    CardView(scrum: scrum)
                }
                .listRowBackground(scrum.theme.mainColor)
            }
            .navigationTitle("Daily Scrums")
            .toolbar {
                Button(action: {
                    isPresentingNewScrumView = true
                }) {
                    Image(systemName: "plus")
                }
                .accessibilityLabel("New Scrum")
            }
            .sheet(isPresented: $isPresentingNewScrumView) {
                NewScrumSheet()
            }
        }
    }
}

#Preview {
    ScrumsView()
}

 

 

.toolbar

 

toolbar 는 자주 사용하는 명령어나 컨트롤에 즉시 접근할 수 있도록 한다.


iOS 기기 종류에 따라 앱의 콘텐츠 위나 아래에 툴바를 표시할 수 있다. -> 여러 멀티플랫폼 기기 지원 시에는 활용할 것이 많을 듯 하다. 

 

HIG 에 toolbar 관련한 내용도 있다고 한다.

 

https://developer.apple.com/documentation/SwiftUI/Toolbars

 

Toolbars | Apple Developer Documentation

Provide immediate access to frequently used commands and controls.

developer.apple.com

 

 

 

 

https://developer.apple.com/documentation/SwiftUI/Toolbars

 

Toolbars | Apple Developer Documentation

Provide immediate access to frequently used commands and controls.

developer.apple.com

 

이건 개발문서!

 

 

 

 

내가 지금 개발하는 곳에서는 이렇게 사용했다.

 

.toolbar {
            Button("수정") {
                isPresentingEditView = true
            }
            .tint(.main)
        }

 

사용자가 바로 컨트롤러 할 수 있도록 동작해야하는 버튼 등을 배치한다. 

 

 

문서보면 정말 잘 나와있고, style 적용 방법도 있다.

 

 

 

 

 

.sheet

 

sheet(isPresented:onDismiss:content:)

 

sheet 에는 이렇게 3가지 요소가 들어간다.

바인딩 할 Binding<Bool> 값이 true 가 되면 sheet가 열리고, 닫으면 false 상태가 된다.

그래서 onDismiss 로 닫힌 상태가 될 때 바인딩 bool 값이 false 가 된다.

 

이 시점!! 궁금하지않은감?ㅎㅎ

 

이 바인딩 값 변경은 onDismiss 호출 전에 일어난다.

onDismiss 클로저 안에서 isPresented 값을 확인하면 이미 false로 변경되게 된다.

 

어? 닫아야겠다? -> binding 값 false 로 -> 닫기 완료!

 

 

https://developer.apple.com/documentation/swiftui/view/sheet(ispresented:ondismiss:content:)#discussion

 

sheet(isPresented:onDismiss:content:) | Apple Developer Documentation

Presents a sheet when a binding to a Boolean value that you provide is true.

developer.apple.com

 


Sheet의 높이 설정방법(자주 쓰게 될 것 같음)

.sheet(isPresented: $isPresented) {
    SheetView()
        .presentationDetents([.medium, .large])
}

 

 

 

이건 GPT에게 물어본 것.. 구현은 안해봤다. 언젠가 해보자ㅏ

 

 

 


Solution (해결 결과)

- sheet 를 이제 곧 써야하는데, 이때 한번 해봐야겠다.

- toolbar 하면 그냥 상단 우측 버튼 이정도 생각이였는데, 여러 멀티플래폼에선 유용할 수 있겠다는 생각이 들었다.

- 그리고 HIG!! 진짜 문서 잘되어있다... ...그치만.... 디자인은 너무 힘들다...ㅠㅠ

 

 

Reflection (회고)

오늘 배운 것: 

toobar, sheet

 

728x90