Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ enum NaviType {
case titleWithLeftButton // 뒤로가기 버튼 + 중앙 타이틀
case search // 검색창
case report // 신고
case editModeForTitleWithLeftButton // 수정하기 페이지일 때
Copy link
Collaborator

@lsj8706 lsj8706 May 14, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

NaviBar에 타입을 추가하는 방식으로 하셨군요..!

제가 의도했던 방식에서 네비바의 타입은 네비바 자체의 UI에서 새로운 것이 생길때 추가하는 것이지 버튼 터치했을 때 동작이 생겼을 때 추가하는 방식이 아니었어요!
물론 이렇게 해도 동작은 의도한대로 하겠지만 객체의 책임과 역할의 측면에서 다음과 같이 아쉬운 부분이 생길 것 같습니다!

  1. CustomNaviBar는 중복되는 View 파일을 VC에서 분리한 것으로 단순히 "뷰"만 그리는 것이 좋습니다! 즉, 최대한 단순해야 한다는 것입니다.
  2. 특히, NaviBar의 좌측(뒤로가기)버튼을 눌렀을 때 알러트 팝업이 보여지도록 하는 것은 네비바 입장에서는 필요없는 책임입니다. 이 액션은 NaviBar를 생성한 VC에서 처리할 작업이지 View파일인 네비바가 이 역할을 담당하는 것은 SRP에서 벗어난다고 생각합니다
  3. 그리고, 기존의 함수들에 type을 파러미터로 더 추가하여 분기처리를 하고 있는데 하나의 함수에서는 최소한의 파라미터와 최소한의 분기처리를 담당하도록 해야합니다. (클린 코드적 측면)

결론

사실 이미 기존에 잘 만들어진 함수가 있습니다!
resetLeftButtonAction 함수를 이용해 네비바를 호출한 VC에서 뒤로가기 버튼을 클릭했을 때 처리할 액션을 지정할 수 있습니다.
즉, 수정하기VC에서 CustomNaviBar를 반든 부분이 있을텐데 그 뒤에 이어서 resetLeftButtonAction를 호출하고 파라미터로 들어갈 클로져에 팝업뷰를 보여주는 코드를 넣으면 될 것 같습니다..!
이런 방식으로 시도하다가 잘 안되면 언제든 연락주세요~!

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

오얘~~~~ 바꿧어용

}

final class CustomNavigationBar: UIView {
Expand Down Expand Up @@ -49,7 +50,7 @@ final class CustomNavigationBar: UIView {
self.vc = vc
self.setUI(type)
self.setLayout(type)
self.setAddTarget()
self.setAddTarget(type)
self.setDelegate()
}

Expand All @@ -69,8 +70,16 @@ extension CustomNavigationBar {
}
}

private func setAddTarget() {
self.leftButton.addTarget(self, action: #selector(popToPreviousVC), for: .touchUpInside)
private func setAddTarget(_ type: NaviType) {
self.naviType = type

switch type {
case .editModeForTitleWithLeftButton:
self.leftButton.addTarget(self, action: #selector(presentToQuitEditAlertVC), for: .touchUpInside)
default:
self.leftButton.addTarget(self, action: #selector(popToPreviousVC), for: .touchUpInside)
}

self.rightButton.addTarget(self, action: #selector(searchLocation), for: .touchUpInside)
self.reportButton.addTarget(self, action: #selector(reportLocation), for: .touchUpInside)
}
Expand All @@ -87,25 +96,25 @@ extension CustomNavigationBar {
}

@discardableResult
func resetLeftButtonAction(_ closure: (() -> Void)? = nil) -> Self {
func resetLeftButtonAction(_ closure: (() -> Void)? = nil, _ type: NaviType) -> Self {
self.leftButtonClosure = closure
self.leftButton.removeTarget(self, action: nil, for: .touchUpInside)
if closure != nil {
self.leftButton.addTarget(self, action: #selector(leftButtonDidTap), for: .touchUpInside)
} else {
self.setAddTarget()
self.setAddTarget(type)
}
return self
}

@discardableResult
func resetRightButtonAction(_ closure: (() -> Void)? = nil) -> Self {
func resetRightButtonAction(_ closure: (() -> Void)? = nil, _ type: NaviType) -> Self {
self.rightButtonClosure = closure
self.rightButton.removeTarget(self, action: nil, for: .touchUpInside)
if closure != nil {
self.rightButton.addTarget(self, action: #selector(rightButtonDidTap), for: .touchUpInside)
} else {
self.setAddTarget()
self.setAddTarget(type)
}
return self
}
Expand Down Expand Up @@ -142,13 +151,13 @@ extension CustomNavigationBar {
}

@discardableResult
func resetReportButtonAction(_ closure: (() -> Void)? = nil) -> Self {
func resetReportButtonAction(_ closure: (() -> Void)? = nil, _ type: NaviType) -> Self {
self.reportButtonClosure = closure
self.reportButton.removeTarget(self, action: nil, for: .touchUpInside)
if closure != nil {
self.reportButton.addTarget(self, action: #selector(reportButtonDidTap), for: .touchUpInside)
} else {
self.setAddTarget()
self.setAddTarget(type)
}
return self
}
Expand All @@ -172,6 +181,19 @@ extension CustomNavigationBar {
}
}

@objc private func presentToQuitEditAlertVC() {
guard let vc = vc else { return }
let quitEditAlertVC = RNAlertVC(description: "러닝 기록 수정을 종료할까요?\n종료 시 수정 내용이 반영되지 않아요.")

quitEditAlertVC.rightButtonTapAction = { [weak self] in
quitEditAlertVC.dismiss(animated: false)
vc.navigationController?.popViewController(animated: true)
}

quitEditAlertVC.modalPresentationStyle = .overFullScreen
self.vc?.present(quitEditAlertVC, animated: false, completion: nil)
}

@objc private func searchLocation() {
guard let text = textField.text else { return }
self.hideKeyboard()
Expand Down Expand Up @@ -209,26 +231,31 @@ extension CustomNavigationBar {
leftTitleLabel.textColor = .g1
leftTitleLabel.isHidden = false
case .titleWithLeftButton:
centerTitleLabel.text = ""
centerTitleLabel.font = .h4
centerTitleLabel.textColor = .g1
centerTitleLabel.isHidden = false
leftButton.isHidden = false
leftButton.setImage(ImageLiterals.icArrowBack, for: .normal)
setTitleWithLeftButton()
case .search:
leftButton.setImage(ImageLiterals.icArrowBack, for: .normal)
textField.attributedPlaceholder = NSAttributedString(string: "출발지 검색", attributes: [NSAttributedString.Key.foregroundColor: UIColor.g3, NSAttributedString.Key.font: UIFont.b1])
textField.font = .b1
textField.textColor = .g1
textField.addLeftPadding(width: 2)
rightButton.setImage(ImageLiterals.icSearch, for: .normal)

case .report:
reportButton.setImage(ImageLiterals.icArrowBack, for: .normal)
reportButton.isHidden = false
case .editModeForTitleWithLeftButton:
setTitleWithLeftButton()
}
}

private func setTitleWithLeftButton() {
centerTitleLabel.text = ""
centerTitleLabel.font = .h4
centerTitleLabel.textColor = .g1
centerTitleLabel.isHidden = false
leftButton.isHidden = false
leftButton.setImage(ImageLiterals.icArrowBack, for: .normal)
}

private func setLayout(_ type: NaviType) {
switch type {
case .title:
Expand All @@ -239,6 +266,8 @@ extension CustomNavigationBar {
setSearchLayout()
case .report:
setReportButtonLayout()
case .editModeForTitleWithLeftButton:
setTitleWithLeftButtonLayout()
}
}

Expand Down
12 changes: 11 additions & 1 deletion Runnect-iOS/Runnect-iOS/Network/Router/RecordRouter.swift
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ enum RecordRouter {
case recordRunning(param: RunningRecordRequestDto)
case getActivityRecordInfo
case deleteRecord(recordIdList: [Int])
case updateRecordTitle(recordId: Int, recordTitle: String)
}

extension RecordRouter: TargetType {
Expand All @@ -30,6 +31,8 @@ extension RecordRouter: TargetType {
return "/record"
case .getActivityRecordInfo:
return "/record/user"
case .updateRecordTitle(recordId: let recordId, _):
return "/record/\(recordId)"
}
}

Expand All @@ -41,6 +44,8 @@ extension RecordRouter: TargetType {
return .get
case .deleteRecord:
return .put
case .updateRecordTitle:
return .patch
}
}

Expand All @@ -56,12 +61,17 @@ extension RecordRouter: TargetType {
return .requestPlain
case .deleteRecord(let recordIdList):
return .requestParameters(parameters: ["recordIdList": recordIdList], encoding: JSONEncoding.default)
case .updateRecordTitle(_, let recordTitle):
do {
return .requestParameters(parameters: ["title": recordTitle], encoding: JSONEncoding.default)
} catch {
fatalError("Encoding 실패")}
}
}

var headers: [String: String]? {
switch self {
case .recordRunning, .getActivityRecordInfo, .deleteRecord:
default:
return Config.defaultHeader
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,10 @@ final class CourseDrawingHomeVC: UIViewController {
self.setLayout()
self.setAddTarget()
}

override func viewWillAppear(_ animated: Bool) {
self.hideTabBar(wantsToHide: false)
}
}

// MARK: - Methods
Expand Down
Loading