From 13ee6355f547aeb6cf9085b5ec48c9357192a883 Mon Sep 17 00:00:00 2001 From: yeonwoo Date: Mon, 27 Mar 2023 11:28:06 +0900 Subject: [PATCH 1/3] =?UTF-8?q?[Feat]=20#117=20-=20=EB=84=A4=EB=B9=84?= =?UTF-8?q?=EB=B0=94=20=EC=8B=A0=EA=B3=A0=EB=B2=84=ED=8A=BC=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UIComponents/CustomNavigationBar.swift | 53 ++++++++++++++++++- 1 file changed, 52 insertions(+), 1 deletion(-) diff --git a/Runnect-iOS/Runnect-iOS/Global/UIComponents/CustomNavigationBar.swift b/Runnect-iOS/Runnect-iOS/Global/UIComponents/CustomNavigationBar.swift index b3fb7652..726ce9e0 100644 --- a/Runnect-iOS/Runnect-iOS/Global/UIComponents/CustomNavigationBar.swift +++ b/Runnect-iOS/Runnect-iOS/Global/UIComponents/CustomNavigationBar.swift @@ -19,6 +19,7 @@ enum NaviType { case title // 좌측 타이틀 case titleWithLeftButton // 뒤로가기 버튼 + 중앙 타이틀 case search // 검색창 + case report // 신고 } final class CustomNavigationBar: UIView { @@ -30,6 +31,7 @@ final class CustomNavigationBar: UIView { private var vc: UIViewController? private var leftButtonClosure: (() -> Void)? private var rightButtonClosure: (() -> Void)? + private var reportButtonClosure: (() -> Void)? // MARK: - UI Components @@ -37,6 +39,7 @@ final class CustomNavigationBar: UIView { private let centerTitleLabel = UILabel() private let leftButton = UIButton() private let rightButton = UIButton() + private let reportButton = UIButton() private let textField = UITextField() // MARK: - initialization @@ -62,13 +65,14 @@ extension CustomNavigationBar { UIView.animate(withDuration: 0.1, delay: 0, options: .curveEaseInOut) { - [self.leftTitleLabel, self.centerTitleLabel, self.leftButton, self.rightButton].forEach { $0.alpha = isHidden ? 0 : 1 } + [self.leftTitleLabel, self.centerTitleLabel, self.leftButton, self.rightButton, self.reportButton].forEach { $0.alpha = isHidden ? 0 : 1 } } } private func setAddTarget() { 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) } private func setDelegate() { @@ -136,6 +140,24 @@ extension CustomNavigationBar { self.textField.resignFirstResponder() return self } + + @discardableResult + func resetReportButtonAction(_ closure: (() -> Void)? = nil) -> 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() + } + return self + } + + @discardableResult + func hideReportButton() -> Self { + self.reportButton.isHidden = true + return self + } } // MARK: - @objc Function @@ -151,6 +173,11 @@ extension CustomNavigationBar { delegate?.searchButtonDidTap(text: text) } + @objc private func reportLocation() { + self.reportButtonClosure?() + + } + @objc private func rightButtonDidTap() { self.rightButtonClosure?() } @@ -158,6 +185,9 @@ extension CustomNavigationBar { @objc private func leftButtonDidTap() { self.leftButtonClosure?() } + @objc private func reportButtonDidTap() { + self.reportButtonClosure?() + } } // MARK: - UI & Layout @@ -187,6 +217,10 @@ extension CustomNavigationBar { textField.textColor = .g1 textField.addLeftPadding(width: 2) rightButton.setImage(ImageLiterals.icSearch, for: .normal) + + case .report: + reportButton.setImage(ImageLiterals.icArrowBack, for: .normal) + reportButton.isHidden = false } } @@ -198,6 +232,8 @@ extension CustomNavigationBar { setTitleWithLeftButtonLayout() case .search: setSearchLayout() + case .report: + setReportButtonLayout() } } @@ -245,6 +281,21 @@ extension CustomNavigationBar { make.trailing.equalTo(rightButton.snp.leading) } } + + private func setReportButtonLayout() { + self.addSubviews(leftButton,reportButton) + leftButton.snp.makeConstraints { make in + make.centerY.equalToSuperview() + make.leading.equalToSuperview() + make.width.height.equalTo(48) + } + reportButton.snp.makeConstraints { make in + make.centerY.equalToSuperview() + make.trailing.equalToSuperview() + make.width.height.equalTo(48) + } + + } } // MARK: - UITextFieldDelegate From 73521a1a7e5e51ffc6d4bbaa46980e03424428ce Mon Sep 17 00:00:00 2001 From: yeonwoo Date: Tue, 4 Apr 2023 11:43:36 +0900 Subject: [PATCH 2/3] =?UTF-8?q?[Feat]=20#117=20-=20more=20=EC=95=84?= =?UTF-8?q?=EC=9D=B4=EC=BD=98=20=EC=97=90=EC=85=8B=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Global/Literal/ImageLiterals.swift | 2 ++ .../ic_more.imageset/Contents.json | 23 ++++++++++++++++++ .../ic_more.imageset/Frame 9479.png | Bin 0 -> 203 bytes .../ic_more.imageset/Frame 9479@2x.png | Bin 0 -> 313 bytes .../ic_more.imageset/Frame 9479@3x.png | Bin 0 -> 482 bytes .../UIComponents/CustomNavigationBar.swift | 2 +- 6 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 Runnect-iOS/Runnect-iOS/Global/Resource/Assets.xcassets/ic_more.imageset/Contents.json create mode 100644 Runnect-iOS/Runnect-iOS/Global/Resource/Assets.xcassets/ic_more.imageset/Frame 9479.png create mode 100644 Runnect-iOS/Runnect-iOS/Global/Resource/Assets.xcassets/ic_more.imageset/Frame 9479@2x.png create mode 100644 Runnect-iOS/Runnect-iOS/Global/Resource/Assets.xcassets/ic_more.imageset/Frame 9479@3x.png diff --git a/Runnect-iOS/Runnect-iOS/Global/Literal/ImageLiterals.swift b/Runnect-iOS/Runnect-iOS/Global/Literal/ImageLiterals.swift index b3bf5bc6..a70f0055 100644 --- a/Runnect-iOS/Runnect-iOS/Global/Literal/ImageLiterals.swift +++ b/Runnect-iOS/Runnect-iOS/Global/Literal/ImageLiterals.swift @@ -42,6 +42,7 @@ enum ImageLiterals { static var icAlert: UIImage { .load(named: "ic_alert") } static var icLocationOverlay: UIImage { .load(named: "ic_location_overlay") } static var icLogoCircle: UIImage { .load(named: "ic_logo_circle") } + static var icMore: UIImage { .load(named: "ic_more") } // img static var imgBackground: UIImage { .load(named: "img_background") } @@ -69,6 +70,7 @@ enum ImageLiterals { static var imgAd: UIImage { .load(named: "img_ad") } } + extension UIImage { static func load(named imageName: String) -> UIImage { guard let image = UIImage(named: imageName, in: nil, compatibleWith: nil) else { diff --git a/Runnect-iOS/Runnect-iOS/Global/Resource/Assets.xcassets/ic_more.imageset/Contents.json b/Runnect-iOS/Runnect-iOS/Global/Resource/Assets.xcassets/ic_more.imageset/Contents.json new file mode 100644 index 00000000..085da527 --- /dev/null +++ b/Runnect-iOS/Runnect-iOS/Global/Resource/Assets.xcassets/ic_more.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Frame 9479.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Frame 9479@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Frame 9479@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Runnect-iOS/Runnect-iOS/Global/Resource/Assets.xcassets/ic_more.imageset/Frame 9479.png b/Runnect-iOS/Runnect-iOS/Global/Resource/Assets.xcassets/ic_more.imageset/Frame 9479.png new file mode 100644 index 0000000000000000000000000000000000000000..22facda062b1f7d31b6664fcbfeef517394543d2 GIT binary patch literal 203 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTC&H|6fVg?3oVGw3ym^DWND9BhG zWNrb_P#ZKbLh*2~7YZ20>~7 literal 0 HcmV?d00001 diff --git a/Runnect-iOS/Runnect-iOS/Global/Resource/Assets.xcassets/ic_more.imageset/Frame 9479@2x.png b/Runnect-iOS/Runnect-iOS/Global/Resource/Assets.xcassets/ic_more.imageset/Frame 9479@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..cca4f46047b7f51cc361814461ff22f7edd88f54 GIT binary patch literal 313 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGooCO|{#S9E$svykh8Km+7D9BhG zHZ1L~8<@A}$GUa)H zcO9F;>#v#nxn}xF@A|_AOHw2KE-n!1)vT|*_hbIAYs&&~)C54n1Wu_U&@I!|DSc6-Mn!2XQ@J{an^LB{Ts55zB46 literal 0 HcmV?d00001 diff --git a/Runnect-iOS/Runnect-iOS/Global/Resource/Assets.xcassets/ic_more.imageset/Frame 9479@3x.png b/Runnect-iOS/Runnect-iOS/Global/Resource/Assets.xcassets/ic_more.imageset/Frame 9479@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..2b1c94e66d3f2b272eb528a2a0935bef648570af GIT binary patch literal 482 zcmeAS@N?(olHy`uVBq!ia0vp^6F``Q4M;wBd$a>caTa()7Bes?T7WR4>omgzpde#$ zkh>GZx^prwfgF}}M_)$E)e-c@Na^;>bjv*C{Z*T4OJscpxdOiVkfxA*35zx}m*nnb{Y3sci~#?(EVzuou1!*|1~K(NV-M5URTF=zXa=m8o9RD^iM9KP5toRL(CG*jwr&@Y#s+Rf4eNx76?Uv# zVx6fqKDNp>Gen8*Rri3|LH#9s4ZrNN7-iIE^Bp00i_ I>zopr05lz{WdHyG literal 0 HcmV?d00001 diff --git a/Runnect-iOS/Runnect-iOS/Global/UIComponents/CustomNavigationBar.swift b/Runnect-iOS/Runnect-iOS/Global/UIComponents/CustomNavigationBar.swift index 726ce9e0..84f9bf13 100644 --- a/Runnect-iOS/Runnect-iOS/Global/UIComponents/CustomNavigationBar.swift +++ b/Runnect-iOS/Runnect-iOS/Global/UIComponents/CustomNavigationBar.swift @@ -283,7 +283,7 @@ extension CustomNavigationBar { } private func setReportButtonLayout() { - self.addSubviews(leftButton,reportButton) + self.addSubviews(leftButton, reportButton) leftButton.snp.makeConstraints { make in make.centerY.equalToSuperview() make.leading.equalToSuperview() From ac66b80bda96c3d746b4f0441ecb3077574fa170 Mon Sep 17 00:00:00 2001 From: yeonwoo Date: Fri, 7 Apr 2023 23:12:42 +0900 Subject: [PATCH 3/3] =?UTF-8?q?[Feat]=20#117-=EC=8B=A0=EA=B3=A0=ED=8F=BC?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CourseDetail/VC/CourseDetailVC.swift | 29 ++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/Runnect-iOS/Runnect-iOS/Presentation/CourseDetail/VC/CourseDetailVC.swift b/Runnect-iOS/Runnect-iOS/Presentation/CourseDetail/VC/CourseDetailVC.swift index ce70efcb..728f789a 100644 --- a/Runnect-iOS/Runnect-iOS/Presentation/CourseDetail/VC/CourseDetailVC.swift +++ b/Runnect-iOS/Runnect-iOS/Presentation/CourseDetail/VC/CourseDetailVC.swift @@ -35,6 +35,10 @@ final class CourseDetailVC: UIViewController { // MARK: - UI Components private lazy var navibar = CustomNavigationBar(self, type: .titleWithLeftButton) + private let moreButton = UIButton(type: .system).then { + $0.setImage(ImageLiterals.icMore, for: .normal) + $0.tintColor = .g1 + } private lazy var middleScorollView = UIScrollView().then { $0.isScrollEnabled = true $0.showsVerticalScrollIndicator = false @@ -127,6 +131,22 @@ extension CourseDetailVC { getCourseDetailWithPath(courseId: courseId) } + @objc func moreButtonDidTap() { + + let alertController = UIAlertController(title: nil, message: nil, preferredStyle: .actionSheet) + + let saveAction = UIAlertAction(title: "저장하기", style: .default, handler: nil) + let reportAction = UIAlertAction(title: "신고하기", style: .destructive, handler: {(_: UIAlertAction!) in + //report action +}) + let cancelAction = UIAlertAction(title: "닫기", style: .cancel, handler: nil) + + [ saveAction, reportAction, cancelAction ].forEach { alertController.addAction($0) } + + present(alertController, animated: true, completion: nil) + + } + private func pushToCountDownVC() { guard let courseModel = self.courseModel, let path = courseModel.path, @@ -176,6 +196,8 @@ extension CourseDetailVC { private func setAddTarget() { likeButton.addTarget(self, action: #selector(likeButtonDidTap), for: .touchUpInside) + + moreButton.addTarget(self, action: #selector(moreButtonDidTap), for: .touchUpInside) } } @@ -184,11 +206,16 @@ extension CourseDetailVC { // MARK: - Layout Helpers private func setNavigationBar() { view.addSubview(navibar) - + view.addSubview(moreButton) navibar.snp.makeConstraints { make in make.top.leading.trailing.equalTo(view.safeAreaLayoutGuide) make.height.equalTo(48) } + moreButton.snp.makeConstraints { make in + make.trailing.equalTo(self.view.safeAreaLayoutGuide).inset(16) + make.centerY.equalTo(navibar) + } + } private func setUI() {