@@ -12,7 +12,8 @@ import SnapKit
12
12
final class EditCategoryViewController : UIViewController {
13
13
//MARK: - Properties
14
14
private let realm = try ! Realm ( )
15
- let palette = Palette ( )
15
+ lazy var palette = realm. objects ( Palettes . self)
16
+
16
17
var selectedColorCode : Int ?
17
18
var selectedSegmentRow : Int ?
18
19
var saveDate : String = " "
@@ -70,20 +71,22 @@ final class EditCategoryViewController: UIViewController {
70
71
self . paletteView. delegate = self
71
72
self . paletteView. dataSource = self
72
73
73
-
74
74
self . hideKeyboardWhenTapped ( )
75
75
self . setNavigationItem ( )
76
76
77
+ NotificationCenter . default. addObserver ( self , selector: #selector( didRecieveCloseColorEditView ( _: ) ) , name: . closeColorEditView, object: nil )
78
+
77
79
self . saveDate = ( UIApplication . shared. delegate as! AppDelegate ) . saveDate
78
80
}
79
81
82
+ //MARK: - Method
80
83
private func setNavigationItem( ) {
81
84
self . navigationItem. hidesBackButton = true
82
85
self . navigationItem. title = " Category "
83
86
}
84
87
85
88
private func addCategoryMtd( ) {
86
- guard let row = self . selectedColorCode else { // 색을 정했는지 검사 안했으면 경고창 띄우기
89
+ guard let code = self . selectedColorCode else { // 색을 정했는지 검사 안했으면 경고창 띄우기
87
90
self . notiAlert ( title: " 경 고 " , message: " 색과 이름을 모두 입력해주세요. " )
88
91
return
89
92
}
@@ -96,13 +99,13 @@ final class EditCategoryViewController: UIViewController {
96
99
if name == " " {
97
100
self . notiAlert ( title: " 경 고 " , message: " 색과 이름을 모두 입력해주세요. " )
98
101
} else {
99
- StopWatchDAO ( ) . addSegment ( row: row , name: name, date: self . saveDate) // 과목을 DB에 추가하는 메소드
102
+ StopWatchDAO ( ) . addSegment ( row: code , name: name, date: self . saveDate) // 과목을 DB에 추가하는 메소드
100
103
101
104
self . navigationController? . popViewController ( animated: true ) // 전 뷰로 돌아가기
102
105
}
103
106
}
104
107
105
- func editCategoryMtd( ) {
108
+ private func editCategoryMtd( ) {
106
109
guard let code = self . selectedColorCode else {
107
110
self . notiAlert ( title: " 경 고 " , message: " 색과 이름을 모두 입력해주세요. " )
108
111
return
@@ -135,7 +138,7 @@ final class EditCategoryViewController: UIViewController {
135
138
return idx
136
139
}
137
140
138
- //MARK: Selector
141
+ //MARK: - Selector
139
142
@objc func buttonTapped( button: UIButton ) {
140
143
switch button. tag{
141
144
case 1 :
@@ -144,87 +147,35 @@ final class EditCategoryViewController: UIViewController {
144
147
} else {
145
148
self . addCategoryMtd ( ) // 없으면 새로 추가.
146
149
}
147
-
148
150
case 2 :
149
151
self . navigationController? . popViewController ( animated: true )
150
152
default :
151
153
break
152
154
}
153
155
}
154
156
155
- @objc func respondToGesture( _ sender: UILongPressGestureRecognizer ) {
156
- self . openEditColorView ( )
157
- //색상코드 불러오기
158
- guard let row = sender. view? . tag else { return }
159
- let object = realm. objects ( Palettes . self) [ row]
160
- self . editColorView? . palettes = object
161
- let colorCode = object. colorCode
162
- self . editColorView? . addButton. tag = colorCode
163
- let convertString = String ( colorCode, radix: 16 ) . uppercased ( )
164
- self . editColorView!. getColorCodeTextfield. text? = convertString
165
- self . editColorView!. colorPreView. backgroundColor = self . view. uiColorFromHexCode ( colorCode)
166
-
167
- //버튼 타이틀을 edit으로 수정하고 edit method,delete method 추가
168
- self . editColorView? . addButton. setTitle ( " edit " , for: . normal)
169
- self . editColorView? . titleLabel. text = " 색상 편집 "
170
- self . editColorView? . addButton. addTarget ( self , action: #selector( self . editColor ( _: ) ) , for: . touchUpInside)
171
- self . editColorView? . deleteColrButton. addTarget ( self , action: #selector( self . deleteColor ( _: ) ) , for: . touchUpInside)
172
- //delete버튼 보이기
173
- self . editColorView? . deleteColrButton. isHidden = false
174
- }
175
-
176
- //MARK: - EditColorViewMethod
177
- //색 저장
178
- @objc func addColor( _ sender: UIButton ) {
179
- let realm = try ! Realm ( )
180
- try ! realm. write {
181
- let newColorCode = Palettes ( )
182
- newColorCode. colorCode = sender. tag
183
- realm. add ( newColorCode)
184
- }
185
- self . paletteView. reloadData ( )
186
- self . editColorView? . removeFromSuperview ( )
187
- self . editColorView = nil
188
- }
189
-
190
- @objc func editColor( _ sender: UIButton ) {
191
- try ! realm. write {
192
- guard let object = self . editColorView? . palettes else { return }
193
- object. colorCode = sender. tag
194
- }
195
- self . paletteView. reloadData ( )
196
- self . editColorView? . removeFromSuperview ( )
197
- self . editColorView = nil
198
- }
199
-
200
- @objc func deleteColor( _ sender: UIButton ) {
201
- guard let palette = self . editColorView? . palettes else { return }
202
- let realm = try ! Realm ( )
203
- try ! realm. write {
204
- realm. delete ( palette)
205
- }
206
- self . paletteView. reloadData ( )
207
- self . editColorView? . removeFromSuperview ( )
208
- self . editColorView = nil
157
+ @objc func didRecieveLongPressGesture( _ sender: UILongPressGestureRecognizer ) {
158
+ guard let row = self . paletteView. indexPathForItem ( at: sender. location ( in: self . paletteView) ) ? . row else { return }
159
+ self . openEditColorView ( . edit, palette: self . palette [ row] )
209
160
}
210
161
211
- func openEditColorView( ) {
162
+ //MARK: - EditColorViewMethod
163
+ func openEditColorView( _ mode: ColorViewMode , palette: Palettes ? ) {
212
164
guard self . editColorView == nil else { return } // 중복 뷰 방지
213
- self . editColorView = EditColorView ( )
214
- self . view. addSubview ( self . editColorView!)
215
- self . editColorView!. cancelButton. addTarget ( self , action: #selector( self . closeColorView ( _: ) ) , for: . touchUpInside)
216
-
217
- self . editColorView!. translatesAutoresizingMaskIntoConstraints = false
218
- NSLayoutConstraint . activate ( [
219
- self . editColorView!. leadingAnchor. constraint ( equalTo: self . view. leadingAnchor, constant: 50 ) ,
220
- self . editColorView!. trailingAnchor. constraint ( equalTo: self . view. trailingAnchor, constant: - 50 ) ,
221
- self . editColorView!. centerYAnchor. constraint ( equalTo: self . view. centerYAnchor) ,
222
- self . editColorView!. heightAnchor. constraint ( equalToConstant: 170 )
223
- ] )
165
+ self . editColorView = EditColorView ( mode, palette) . then {
166
+
167
+ self . view. addSubview ( $0)
168
+ $0. snp. makeConstraints { make in
169
+ make. leading. equalToSuperview ( ) . offset ( 50 )
170
+ make. trailing. equalToSuperview ( ) . offset ( - 50 )
171
+ make. centerY. equalToSuperview ( )
172
+ make. height. equalTo ( 170 )
173
+ }
174
+ }
224
175
}
225
176
226
- //닫기
227
- @ objc func closeColorView ( _ sender : Any ) {
177
+ @ objc private func didRecieveCloseColorEditView ( _ sender : Any ) {
178
+ self . paletteView . reloadData ( )
228
179
self . editColorView? . removeFromSuperview ( )
229
180
self . editColorView = nil
230
181
}
@@ -289,37 +240,32 @@ final class EditCategoryViewController: UIViewController {
289
240
//MARK: - CollectionView Delegate , datasource
290
241
extension EditCategoryViewController : UICollectionViewDelegate , UICollectionViewDataSource {
291
242
func collectionView( _ collectionView: UICollectionView , numberOfItemsInSection section: Int ) -> Int {
292
- return self . realm . objects ( Palettes . self ) . count + 1
243
+ return self . palette . count + 1
293
244
}
294
245
295
246
func collectionView( _ collectionView: UICollectionView , cellForItemAt indexPath: IndexPath ) -> UICollectionViewCell {
296
247
let cell = collectionView. dequeueReusableCell ( withReuseIdentifier: " cell " , for: indexPath) as! PaltteCell
297
248
//초기화
298
- cell. checkImageView. image = UIImage ( systemName: " checkmark " )
299
- cell. checkImageView. isHidden = true
300
- let palettes = self . realm. objects ( Palettes . self)
249
+ cell. prepareForReuse ( )
301
250
302
251
//색상을 추가하는 마지막 셀 구성
303
- if indexPath. row == palettes . count {
252
+ if indexPath. row == palette . count {
304
253
cell. checkImageView. image = UIImage ( systemName: " plus " )
305
254
cell. checkImageView. isHidden = false
306
255
cell. paintView. backgroundColor = . systemGray3
307
256
} else { // 팔레트 구성
308
257
//팔레트 색상 구성
309
- let colorCode = palettes [ indexPath. row] . colorCode
258
+ let colorCode = palette [ indexPath. row] . colorCode
310
259
cell. paintView. backgroundColor = self . view. uiColorFromHexCode ( colorCode)
311
260
312
261
//선택된 셀이면 체크마크!
313
262
if let row = self . findColorIndex ( self . selectedColorCode) {
314
- if indexPath. row == row {
315
- cell. checkImageView. isHidden = false
316
- }
263
+ cell. checkImageView. isHidden = indexPath. row == row ? false : true
317
264
}
318
265
319
266
//편집용 제스쳐 추가
320
- let longPressGeture = UILongPressGestureRecognizer ( target: self , action: #selector( self . respondToGesture ( _: ) ) )
267
+ let longPressGeture = UILongPressGestureRecognizer ( target: self , action: #selector( self . didRecieveLongPressGesture ( _: ) ) )
321
268
cell. addGestureRecognizer ( longPressGeture)
322
- longPressGeture. view? . tag = indexPath. row // 몇번째 셀인지 구분용
323
269
}
324
270
325
271
return cell
@@ -329,8 +275,7 @@ extension EditCategoryViewController: UICollectionViewDelegate,UICollectionViewD
329
275
let object = self . realm. objects ( Palettes . self)
330
276
if indexPath. row == object. count {
331
277
// 색상 추가뷰
332
- self . openEditColorView ( )
333
- self . editColorView!. addButton. addTarget ( self , action: #selector( self . addColor ( _: ) ) , for: . touchUpInside)
278
+ self . openEditColorView ( . add, palette: nil )
334
279
} else { // 색상 골랐을 때
335
280
self . selectedColorCode = object [ indexPath. row] . colorCode
336
281
collectionView. reloadData ( )
0 commit comments