Skip to content

Commit 00986d4

Browse files
committed
Refactor: PaletteView, ColorEditView 리팩토링 및 불필요한 코드 제거
body: ColorEditView 캡슐화 및 PaletteView 리팩토링 , 불필요한코드 제거, 리네이밍
1 parent e4839d7 commit 00986d4

File tree

4 files changed

+226
-231
lines changed

4 files changed

+226
-231
lines changed

StopWatch/Controllers/EditCategoryViewController.swift

Lines changed: 33 additions & 88 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@ import SnapKit
1212
final class EditCategoryViewController: UIViewController {
1313
//MARK: - Properties
1414
private let realm = try! Realm()
15-
let palette = Palette()
15+
lazy var palette = realm.objects(Palettes.self)
16+
1617
var selectedColorCode: Int?
1718
var selectedSegmentRow: Int?
1819
var saveDate:String = ""
@@ -70,20 +71,22 @@ final class EditCategoryViewController: UIViewController {
7071
self.paletteView.delegate = self
7172
self.paletteView.dataSource = self
7273

73-
7474
self.hideKeyboardWhenTapped()
7575
self.setNavigationItem()
7676

77+
NotificationCenter.default.addObserver(self, selector: #selector(didRecieveCloseColorEditView(_:)), name: .closeColorEditView, object: nil)
78+
7779
self.saveDate = (UIApplication.shared.delegate as! AppDelegate).saveDate
7880
}
7981

82+
//MARK: - Method
8083
private func setNavigationItem() {
8184
self.navigationItem.hidesBackButton = true
8285
self.navigationItem.title = "Category"
8386
}
8487

8588
private func addCategoryMtd(){
86-
guard let row = self.selectedColorCode else { // 색을 정했는지 검사 안했으면 경고창 띄우기
89+
guard let code = self.selectedColorCode else { // 색을 정했는지 검사 안했으면 경고창 띄우기
8790
self.notiAlert(title: "경 고", message: "색과 이름을 모두 입력해주세요.")
8891
return
8992
}
@@ -96,13 +99,13 @@ final class EditCategoryViewController: UIViewController {
9699
if name == ""{
97100
self.notiAlert(title: "경 고", message: "색과 이름을 모두 입력해주세요.")
98101
}else{
99-
StopWatchDAO().addSegment(row: row, name: name, date: self.saveDate) // 과목을 DB에 추가하는 메소드
102+
StopWatchDAO().addSegment(row: code, name: name, date: self.saveDate) // 과목을 DB에 추가하는 메소드
100103

101104
self.navigationController?.popViewController(animated: true) // 전 뷰로 돌아가기
102105
}
103106
}
104107

105-
func editCategoryMtd(){
108+
private func editCategoryMtd(){
106109
guard let code = self.selectedColorCode else {
107110
self.notiAlert(title: "경 고", message: "색과 이름을 모두 입력해주세요.")
108111
return
@@ -135,7 +138,7 @@ final class EditCategoryViewController: UIViewController {
135138
return idx
136139
}
137140

138-
//MARK: Selector
141+
//MARK: - Selector
139142
@objc func buttonTapped(button: UIButton){
140143
switch button.tag{
141144
case 1:
@@ -144,87 +147,35 @@ final class EditCategoryViewController: UIViewController {
144147
}else{
145148
self.addCategoryMtd() // 없으면 새로 추가.
146149
}
147-
148150
case 2:
149151
self.navigationController?.popViewController(animated: true)
150152
default:
151153
break
152154
}
153155
}
154156

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])
209160
}
210161

211-
func openEditColorView() {
162+
//MARK: - EditColorViewMethod
163+
func openEditColorView(_ mode: ColorViewMode, palette: Palettes?) {
212164
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+
}
224175
}
225176

226-
//닫기
227-
@objc func closeColorView(_ sender: Any){
177+
@objc private func didRecieveCloseColorEditView(_ sender: Any){
178+
self.paletteView.reloadData()
228179
self.editColorView?.removeFromSuperview()
229180
self.editColorView = nil
230181
}
@@ -289,37 +240,32 @@ final class EditCategoryViewController: UIViewController {
289240
//MARK: - CollectionView Delegate , datasource
290241
extension EditCategoryViewController: UICollectionViewDelegate,UICollectionViewDataSource {
291242
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
292-
return self.realm.objects(Palettes.self).count + 1
243+
return self.palette.count + 1
293244
}
294245

295246
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
296247
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! PaltteCell
297248
//초기화
298-
cell.checkImageView.image = UIImage(systemName: "checkmark")
299-
cell.checkImageView.isHidden = true
300-
let palettes = self.realm.objects(Palettes.self)
249+
cell.prepareForReuse()
301250

302251
//색상을 추가하는 마지막 셀 구성
303-
if indexPath.row == palettes.count {
252+
if indexPath.row == palette.count {
304253
cell.checkImageView.image = UIImage(systemName: "plus")
305254
cell.checkImageView.isHidden = false
306255
cell.paintView.backgroundColor = .systemGray3
307256
}else { // 팔레트 구성
308257
//팔레트 색상 구성
309-
let colorCode = palettes[indexPath.row].colorCode
258+
let colorCode = palette[indexPath.row].colorCode
310259
cell.paintView.backgroundColor = self.view.uiColorFromHexCode(colorCode)
311260

312261
//선택된 셀이면 체크마크!
313262
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
317264
}
318265

319266
//편집용 제스쳐 추가
320-
let longPressGeture = UILongPressGestureRecognizer(target: self, action: #selector(self.respondToGesture(_:)))
267+
let longPressGeture = UILongPressGestureRecognizer(target: self, action: #selector(self.didRecieveLongPressGesture(_:)))
321268
cell.addGestureRecognizer(longPressGeture)
322-
longPressGeture.view?.tag = indexPath.row // 몇번째 셀인지 구분용
323269
}
324270

325271
return cell
@@ -329,8 +275,7 @@ extension EditCategoryViewController: UICollectionViewDelegate,UICollectionViewD
329275
let object = self.realm.objects(Palettes.self)
330276
if indexPath.row == object.count {
331277
// 색상 추가뷰
332-
self.openEditColorView()
333-
self.editColorView!.addButton.addTarget(self, action: #selector(self.addColor(_:)), for: .touchUpInside)
278+
self.openEditColorView(.add, palette: nil)
334279
}else { // 색상 골랐을 때
335280
self.selectedColorCode = object[indexPath.row].colorCode
336281
collectionView.reloadData()

StopWatch/Utils/extension/NotificationName+.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,5 @@ extension Notification.Name {
1111
static let changeCalendarMode = Notification.Name("changeCalendarMode")
1212
static let presentAlert = Notification.Name("presentAlert")
1313
static let changeSaveDate = Notification.Name("changeSaveDate")
14+
static let closeColorEditView = Notification.Name("closeColorEditView")
1415
}

0 commit comments

Comments
 (0)