//
// ContentView.swift
// ReminderApp
//
import SwiftUI
struct HomeView: View {
@State private var isPresented: Bool = false
var body: some View {
NavigationStack {
VStack {
Text("Hello World")
Button {
isPresented = true
} label: {
Text("Add List")
.frame(maxWidth: .infinity, alignment: .trailing)
.font(.headline)
}
.padding()
}
.sheet(isPresented: $isPresented, content: {
NavigationStack {
AddNewListView { name, color in
// TODO: save the list to the DB
}
}
})
}
.padding()
}
}
이전에 작성한 AddNewListView를 호출하기 위해 HomeView를 작성한다.
해당 View는 이전의 ContentView를 대체해 메인 화면의 역할을 하게 된다.
//
// AddNewListView.swift
// ReminderApp
//
import SwiftUI
struct AddNewListView: View {
@Environment(\.dismiss) private var dismiss
@State private var name: String = ""
@State private var selectedColor: Color = .yellow
let onSave: (String, UIColor) -> Void
private var isFormValid: Bool {
!name.isEmpty
}
var body: some View {
VStack {
VStack {
Image(systemName: "line.3.horizontal.circle.fill")
.foregroundColor(selectedColor)
.font(.system(size: 100))
TextField("List Name", text: $name)
.multilineTextAlignment(.center)
.textFieldStyle(.roundedBorder)
}
.padding(30)
.clipShape(RoundedRectangle(cornerRadius: 10.0, style: .continuous))
ColorPickerView(selectedColor: $selectedColor)
}
.frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .top)
.toolbar {
ToolbarItem(placement: .principal) {
Text("New List")
.font(.headline)
}
ToolbarItem(placement: .topBarLeading) {
Button("Close") {
dismiss()
}
}
ToolbarItem(placement: .topBarTrailing) {
Button("Done") {
// TODO: save function
onSave(name, UIColor(selectedColor))
dismiss()
}
.disabled(!isFormValid)
}
}
}
}
AddNewListView는 이전에 이전에 누락됐던 selectedColor를 반영하도록 수정했다.
'프로젝트 > ReminderApp clone' 카테고리의 다른 글
07. 기능개선 #1 (공백 예외처리하기) (0) | 2024.04.17 |
---|---|
06. ListView 구성하기, Preview Data 구성하기 (0) | 2024.04.17 |
04. 저장 기능 구현하기 (0) | 2024.04.11 |
02. 새 List 추가 인터페이스 구현하기 (0) | 2024.04.11 |
01. CoreData 설계(01) (0) | 2024.04.11 |