Skip to content

Commit 56c6486

Browse files
committed
[#16] 토스트 구현하기
- 오픈소스 사용
1 parent 444facc commit 56c6486

File tree

4 files changed

+101
-1
lines changed

4 files changed

+101
-1
lines changed

Todo.xcodeproj/project.pbxproj

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@
2626
6FDD59D72B00AF9600D7148D /* Font.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6FDD59D62B00AF9600D7148D /* Font.swift */; };
2727
6FDD59D92B00B12900D7148D /* Color.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6FDD59D82B00B12900D7148D /* Color.swift */; };
2828
6FDD59DD2B00BE3E00D7148D /* TaskListItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6FDD59DC2B00BE3E00D7148D /* TaskListItemView.swift */; };
29+
6FDEABBF2B08CB92006BBCBF /* PopupView in Frameworks */ = {isa = PBXBuildFile; productRef = 6FDEABBE2B08CB92006BBCBF /* PopupView */; };
30+
6FDEABC12B08CC11006BBCBF /* Toast.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6FDEABC02B08CC11006BBCBF /* Toast.swift */; };
2931
6FF8073C2B02728400B2F956 /* TaskModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6FF8073B2B02728400B2F956 /* TaskModel.swift */; };
3032
6FF8073E2B0272D700B2F956 /* TaskManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6FF8073D2B0272D700B2F956 /* TaskManager.swift */; };
3133
/* End PBXBuildFile section */
@@ -52,6 +54,7 @@
5254
6FDD59D62B00AF9600D7148D /* Font.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Font.swift; sourceTree = "<group>"; };
5355
6FDD59D82B00B12900D7148D /* Color.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Color.swift; sourceTree = "<group>"; };
5456
6FDD59DC2B00BE3E00D7148D /* TaskListItemView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TaskListItemView.swift; sourceTree = "<group>"; };
57+
6FDEABC02B08CC11006BBCBF /* Toast.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Toast.swift; sourceTree = "<group>"; };
5558
6FF8073B2B02728400B2F956 /* TaskModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TaskModel.swift; sourceTree = "<group>"; };
5659
6FF8073D2B0272D700B2F956 /* TaskManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TaskManager.swift; sourceTree = "<group>"; };
5760
/* End PBXFileReference section */
@@ -61,6 +64,7 @@
6164
isa = PBXFrameworksBuildPhase;
6265
buildActionMask = 2147483647;
6366
files = (
67+
6FDEABBF2B08CB92006BBCBF /* PopupView in Frameworks */,
6468
);
6569
runOnlyForDeploymentPostprocessing = 0;
6670
};
@@ -132,6 +136,7 @@
132136
6FDD59DB2B00BE0900D7148D /* Favorite */,
133137
6FB415412B05031A006FD091 /* Task */,
134138
6FA7B7C42B00C9750069602F /* CircleButton.swift */,
139+
6FDEABC02B08CC11006BBCBF /* Toast.swift */,
135140
);
136141
path = View;
137142
sourceTree = "<group>";
@@ -200,6 +205,9 @@
200205
dependencies = (
201206
);
202207
name = Todo;
208+
packageProductDependencies = (
209+
6FDEABBE2B08CB92006BBCBF /* PopupView */,
210+
);
203211
productName = Todo;
204212
productReference = 6FDD59B32B009E9E00D7148D /* Todo.app */;
205213
productType = "com.apple.product-type.application";
@@ -228,6 +236,9 @@
228236
Base,
229237
);
230238
mainGroup = 6FDD59AA2B009E9E00D7148D;
239+
packageReferences = (
240+
6FDEABBD2B08CB92006BBCBF /* XCRemoteSwiftPackageReference "PopupView" */,
241+
);
231242
productRefGroup = 6FDD59B42B009E9E00D7148D /* Products */;
232243
projectDirPath = "";
233244
projectRoot = "";
@@ -259,6 +270,7 @@
259270
buildActionMask = 2147483647;
260271
files = (
261272
6FDD59C82B00A00600D7148D /* FavoriteView.swift in Sources */,
273+
6FDEABC12B08CC11006BBCBF /* Toast.swift in Sources */,
262274
6FDD59B92B009E9E00D7148D /* ContentView.swift in Sources */,
263275
6FDD59DD2B00BE3E00D7148D /* TaskListItemView.swift in Sources */,
264276
6FB415482B05116D006FD091 /* FavoriteButton.swift in Sources */,
@@ -482,6 +494,25 @@
482494
defaultConfigurationName = Release;
483495
};
484496
/* End XCConfigurationList section */
497+
498+
/* Begin XCRemoteSwiftPackageReference section */
499+
6FDEABBD2B08CB92006BBCBF /* XCRemoteSwiftPackageReference "PopupView" */ = {
500+
isa = XCRemoteSwiftPackageReference;
501+
repositoryURL = "https://github.com/exyte/PopupView.git";
502+
requirement = {
503+
kind = upToNextMajorVersion;
504+
minimumVersion = 2.8.2;
505+
};
506+
};
507+
/* End XCRemoteSwiftPackageReference section */
508+
509+
/* Begin XCSwiftPackageProductDependency section */
510+
6FDEABBE2B08CB92006BBCBF /* PopupView */ = {
511+
isa = XCSwiftPackageProductDependency;
512+
package = 6FDEABBD2B08CB92006BBCBF /* XCRemoteSwiftPackageReference "PopupView" */;
513+
productName = PopupView;
514+
};
515+
/* End XCSwiftPackageProductDependency section */
485516
};
486517
rootObject = 6FDD59AB2B009E9E00D7148D /* Project object */;
487518
}

Todo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved

Lines changed: 14 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Todo/View/Task/TaskAddView.swift

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,18 @@
66
//
77

88
import SwiftUI
9+
import PopupView
910

1011
struct TaskAddView: View {
1112
@Environment(\.dismiss) var dismiss
1213
@Environment(TaskManager.self) var taskManager
1314

1415
@State private var isFavorite: Bool = false
16+
@State private var showToast: Bool = false {
17+
didSet {
18+
print("showToast : \(showToast)")
19+
}
20+
}
1521

1622
@State private var task: String = ""
1723
@State private var desc: String = ""
@@ -30,6 +36,12 @@ struct TaskAddView: View {
3036
.onSubmit {
3137
taskFocus = false
3238
}
39+
.onChange(of: task) { oldValue, newValue in
40+
if newValue.count > 29 {
41+
showToast = newValue.count > 29
42+
task = String(task.dropLast())
43+
}
44+
}
3345

3446
TextField("원한다면 투두에 설명도 추가할 수 있어요.", text: $desc, axis: .vertical)
3547
.frame(height: 330, alignment: .top)
@@ -49,6 +61,7 @@ struct TaskAddView: View {
4961
.foregroundStyle(Color.Todo.black)
5062
Button {
5163
isFavorite.toggle()
64+
showToast.toggle()
5265
} label: {
5366
Image(isFavorite ? "ic_tap_star_fill" : "ic_tap_star")
5467
.foregroundStyle(isFavorite ? Color.Todo.red : Color.Todo.black)
@@ -63,14 +76,25 @@ struct TaskAddView: View {
6376
taskManager.save(task: taskModel)
6477
dismiss()
6578
}
66-
6779
}
6880
}
6981
.padding(EdgeInsets(top: 32, leading: 16, bottom: 16, trailing: 16))
7082
}
83+
.popup(isPresented: $showToast) {
84+
Toast(message: "이제는 더이상 입력할 곳이 없다")
85+
} customize: {
86+
$0
87+
.type (.floater())
88+
.position(.bottom)
89+
.autohideIn(2)
90+
.dismissCallback {
91+
showToast = false
92+
}
93+
}
7194
}
7295
}
7396

7497
#Preview {
7598
TaskAddView()
7699
}
100+

Todo/View/Toast.swift

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
//
2+
// Toast.swift
3+
// Todo
4+
//
5+
// Created by 상선 on 11/18/23.
6+
//
7+
8+
import SwiftUI
9+
10+
struct Toast: View {
11+
12+
var message: String
13+
14+
var body: some View {
15+
HStack {
16+
Text(message)
17+
.frame(height: 48, alignment: .center)
18+
.frame(maxWidth: .infinity)
19+
.foregroundStyle(Color.Todo.show)
20+
.font(.Todo.r16)
21+
.background(
22+
RoundedRectangle(cornerRadius: 8)
23+
.fill(Color.Todo.red)
24+
)
25+
}.padding([.leading, .trailing], 16)
26+
}
27+
}
28+
29+
#Preview {
30+
Toast(message: "Toast")
31+
}

0 commit comments

Comments
 (0)