diff --git a/saftyReport/saftyReport/Network/DTO/Response/GalleryResponse.swift b/saftyReport/saftyReport/Network/DTO/Response/GalleryResponse.swift index 2be7522..d33e4eb 100644 --- a/saftyReport/saftyReport/Network/DTO/Response/GalleryResponse.swift +++ b/saftyReport/saftyReport/Network/DTO/Response/GalleryResponse.swift @@ -12,18 +12,18 @@ import Foundation struct GalleryResponse: Codable { let status: Int? let message: String? - let data: GalleryDataObject? + let data: GalleryData? } -// MARK: - GalleryDataObject +// MARK: - GalleryData -struct GalleryDataObject: Codable { +struct GalleryData: Codable { let photoList: [GalleryPhotoList]? } // MARK: - GalleryPhotoList struct GalleryPhotoList: Codable { - let photoID: Int? - let photoURL, createdAt: String? + let photoId: Int? + let photoUrl, createdAt: String? } diff --git a/saftyReport/saftyReport/Network/NetworkManager.swift b/saftyReport/saftyReport/Network/NetworkManager.swift index 228a8c3..daf1d17 100644 --- a/saftyReport/saftyReport/Network/NetworkManager.swift +++ b/saftyReport/saftyReport/Network/NetworkManager.swift @@ -1,8 +1,90 @@ -// -// NetworkManager.swift -// saftyReport -// -// Created by 이지훈 on 11/18/24. -// - import Foundation +import Alamofire + +class NetworkManager { + + func photoAPI(compleation: @escaping (Result<[GalleryPhotoList], NetworkError>) -> Void) { + guard let baseURL = Bundle.main.object(forInfoDictionaryKey: "BASE_URL") as? String else { + print("[Error] BASE_URL is missing in Info.plist") + compleation(.failure(.unknownError)) + return + } + + let url = "\(baseURL)/api/v1/report/photo" + + let headers: HTTPHeaders = ["userId": "1"] + + AF.request(url, method: .get, headers: headers) + .validate() + .response { [weak self] response in + guard let statusCode = response.response?.statusCode, + let data = response.data, + let self = self + else { + print("[Error] Response or Data is nil") + compleation(.failure(.unknownError)) + return + } + + + switch response.result { + case .success: + let photoList = self.decodePhoto(data: data) + compleation(.success(photoList)) + case .failure(let error): + print("[Error] Request Failed: \(error.localizedDescription)") + let error = self.handleStatusCode(statusCode, data: data) + compleation(.failure(error)) + } + } + } + + func decodePhoto(data: Data) -> [GalleryPhotoList] { + do { + let response = try JSONDecoder().decode(GalleryResponse.self, from: data) + return response.data?.photoList ?? [] + } catch { + print("[Decode Error] Failed to Decode GalleryResponse: \(error)") + return [] + } + } +} + +extension NetworkManager { + func decodeError(data: Data) -> String { + do { + let failResponse = try JSONDecoder().decode(FailResponse.self, from: data) + print("[Decode Error Response] Status: \(failResponse.status?.description ?? "Unknown")") + return failResponse.status?.description ?? "" + } catch { + print("[Decode Error] Failed to Decode Error Response: \(error)") + return "" + } + } + + func handleStatusCode(_ statusCode: Int, data: Data) -> NetworkError { + let errorCode = decodeError(data: data) + print("[Handle Status Code] Status Code: \(statusCode), Error Code: \(errorCode)") + + switch (statusCode, errorCode) { + case (400, "00"): + print("[Error] Invalid Request (400, 00)") + return .invalidRequest + case (400, "01"): + print("[Error] Expression Error (400, 01)") + return .expressionError + case (404, ""): + print("[Error] Invalid URL (404)") + return .invalidURL + case (409, "00"): + print("[Error] Duplicate Error (409, 00)") + return .duplicateError + case (500, ""): + print("[Error] Server Error (500)") + return .serverError + default: + print("[Error] Unknown Error") + return .unknownError + } + } +} diff --git a/saftyReport/saftyReport/Resource/Extension/UIImageView+.swift b/saftyReport/saftyReport/Resource/Extension/UIImageView+.swift new file mode 100644 index 0000000..f68b375 --- /dev/null +++ b/saftyReport/saftyReport/Resource/Extension/UIImageView+.swift @@ -0,0 +1,22 @@ +// +// UIImageView+.swift +// saftyReport +// +// Created by OneTen on 11/28/24. +// + +import UIKit + +extension UIImageView { + func load(url: URL) { + DispatchQueue.global().async { [weak self] in + if let data = try? Data(contentsOf: url) { + if let image = UIImage(data: data) { + DispatchQueue.main.async { + self?.image = image + } + } + } + } + } +} diff --git a/saftyReport/saftyReport/Source/Gallery/Cell/ContentsCell.swift b/saftyReport/saftyReport/Source/Gallery/Cell/ContentsCell.swift index dfe58ff..0d530a8 100644 --- a/saftyReport/saftyReport/Source/Gallery/Cell/ContentsCell.swift +++ b/saftyReport/saftyReport/Source/Gallery/Cell/ContentsCell.swift @@ -9,6 +9,7 @@ import UIKit import SnapKit import Then +import Kingfisher class ContentsCell: UICollectionViewCell { var isChecked = false @@ -23,13 +24,13 @@ class ContentsCell: UICollectionViewCell { lazy var checkbox = UIButton().then { $0.clipsToBounds = true $0.contentMode = .scaleAspectFill - $0.setImage(isChecked ? .icnCheckboxISquareSelectedWhite24Px : .icnCheckboxISquareUnselectedWhite24Px, for: .normal) + $0.setImage(.icnCheckboxISquareUnselectedWhite24Px, for: .normal) $0.addTarget(self, action: #selector(checkboxTapped), for: .touchUpInside) } override init(frame: CGRect) { super .init(frame: frame) - + setUI() setLayout() } @@ -63,5 +64,18 @@ class ContentsCell: UICollectionViewCell { checkbox.setImage(.icnCheckboxISquareUnselectedWhite24Px, for: .normal) } } - + + func configure(item: GalleryPhotoList, isChecked: Bool = false){ + if let imageURL = URL(string: item.photoUrl ?? "") { + imageView.kf.setImage(with: imageURL) + } + + self.isChecked = isChecked + self.checkbox.setImage( + isChecked ? .icnCheckboxISquareSelectedWhite24Px : .icnCheckboxISquareUnselectedWhite24Px, + for: .normal + ) + + } + } diff --git a/saftyReport/saftyReport/Source/Gallery/GalleryDetailViewController.swift b/saftyReport/saftyReport/Source/Gallery/GalleryDetailViewController.swift index f279206..1278520 100644 --- a/saftyReport/saftyReport/Source/Gallery/GalleryDetailViewController.swift +++ b/saftyReport/saftyReport/Source/Gallery/GalleryDetailViewController.swift @@ -13,17 +13,15 @@ import Then class GalleryDetailViewController: UIViewController { var checkboxHandler: ((Bool, IndexPath) -> ())? var indexPath: IndexPath! - + var isChecked = false - + private var baseView = UIView().then { $0.backgroundColor = .gray1 } private var imageView = UIImageView().then { - $0.contentMode = .scaleAspectFit -// $0.image = .test - $0.backgroundColor = .gray // 이미지 넣으면 지울 코드 + $0.contentMode = .scaleToFill } private lazy var checkbox = UIButton().then { @@ -31,7 +29,7 @@ class GalleryDetailViewController: UIViewController { $0.setBackgroundImage(.icnCheckboxISquareUnselectedWhite24Px, for: .normal) $0.addTarget(self, action: #selector(checkboxTapped), for: .touchUpInside) } - + private var timeStackView = UIStackView().then { $0.layer.cornerRadius = 5 $0.layer.borderWidth = 1 @@ -40,7 +38,7 @@ class GalleryDetailViewController: UIViewController { } private var createdAtLabel = UILabel().then { - $0.attributedText = .styled(text: "촬영일시", style: .caption1) + $0.attributedText = .styled(text: "촬영일시 :", style: .caption1) $0.font = .systemFont(ofSize: 12, weight: .bold) $0.textColor = .gray13 } @@ -66,6 +64,7 @@ class GalleryDetailViewController: UIViewController { setUI() setLayout() + setupNavigationBar() } override func viewWillAppear(_ animated: Bool) { @@ -75,6 +74,7 @@ class GalleryDetailViewController: UIViewController { isChecked ? .icnCheckboxISquareSelectedWhite24Px : .icnCheckboxISquareUnselectedWhite24Px, for: .normal ) + tabBarController?.tabBar.isHidden = true } override func viewWillDisappear(_ animated: Bool) { @@ -115,10 +115,11 @@ class GalleryDetailViewController: UIViewController { createdAtLabel.snp.makeConstraints { $0.leading.equalToSuperview().inset(8) + $0.width.equalTo(50) } dateTimeLabel.snp.makeConstraints { - $0.leading.equalTo(createdAtLabel.snp.trailing).offset(20) + $0.leading.equalTo(createdAtLabel.snp.trailing).offset(10) } logoLabel.snp.makeConstraints { @@ -130,6 +131,30 @@ class GalleryDetailViewController: UIViewController { } + func configure(item: GalleryPhotoList){ + + if let imageURL = URL(string: item.photoUrl ?? "") { + imageView.kf.setImage(with: imageURL) + + print("[갤러리 디테일뷰]") + print("[URL] \(imageURL)") + print("[ID] \(item.photoId!)") + print("[CreatedAt] \(item.createdAt!)") + } + + let dateTime = formatDateTime(item.createdAt ?? "") + dateTimeLabel.text = dateTime + + } + + private func setupNavigationBar() { + let customNavigationItem = CustomNavigationItem() + customNavigationItem.setUpNavigationBar(for: .back) + navigationItem.backBarButtonItem = customNavigationItem.backBarButtonItem + navigationItem.backBarButtonItem?.tintColor = .gray1 + navigationItem.title = "상세 보기" + } + @objc private func checkboxTapped() { isChecked.toggle() @@ -141,3 +166,21 @@ class GalleryDetailViewController: UIViewController { } } + +extension GalleryDetailViewController { + private func formatDateTime(_ dateTime: String) -> String { + let inputFormatter = DateFormatter() + inputFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss" // 서버에서 받은 날짜 형식 + + let outputFormatter = DateFormatter() + outputFormatter.dateFormat = "yyyy/MM/dd HH:mm:ss" // 원하는 출력 형식 + + // 입력 문자열을 Date로 변환한 후, 다시 문자열로 변환 + if let date = inputFormatter.date(from: dateTime) { + return outputFormatter.string(from: date) + } else { + print("[Error] Invalid date format: \(dateTime)") + return dateTime // 변환 실패 시 원본 문자열 반환 + } + } +} diff --git a/saftyReport/saftyReport/Source/Gallery/GalleryItem.swift b/saftyReport/saftyReport/Source/Gallery/GalleryItem.swift deleted file mode 100644 index f64f3d9..0000000 --- a/saftyReport/saftyReport/Source/Gallery/GalleryItem.swift +++ /dev/null @@ -1,26 +0,0 @@ -// -// GalleryItem.swift -// saftyReport -// -// Created by OneTen on 11/18/24. -// - -import UIKit - -struct GalleryItem: Hashable { - let id = UUID() - let url: String? - let image: UIImage - let date: String -} - -extension GalleryItem { - static let dummyGalleryItem: [GalleryItem] = [ - GalleryItem(url: nil, image: UIImage(systemName: "square.fill")!, date: "대충 시간"), - GalleryItem(url: nil, image: UIImage(systemName: "square.fill")!, date: "대충 시간"), - GalleryItem(url: nil, image: UIImage(systemName: "square.fill")!, date: "대충 시간"), - GalleryItem(url: nil, image: UIImage(systemName: "square.fill")!, date: "대충 시간"), - GalleryItem(url: nil, image: UIImage(systemName: "square.fill")!, date: "대충 시간"), - GalleryItem(url: nil, image: UIImage(systemName: "square.fill")!, date: "대충 시간"), - ] -} diff --git a/saftyReport/saftyReport/Source/Gallery/GalleryViewController.swift b/saftyReport/saftyReport/Source/Gallery/GalleryViewController.swift index 6970c79..227bb7b 100644 --- a/saftyReport/saftyReport/Source/Gallery/GalleryViewController.swift +++ b/saftyReport/saftyReport/Source/Gallery/GalleryViewController.swift @@ -9,9 +9,15 @@ import UIKit import SnapKit import Then -import Kingfisher class GalleryViewController: UIViewController { + private let networkManager = NetworkManager() + + private var firstSectionPhotoList: [GalleryPhotoList] = [] + private var firstSectionCheckedStatus: Set = [] + + private var secondSectionPhotoList: [GalleryPhotoList] = [] + private var secondSectionCheckedStatus: Set = [] private let collectionView = UICollectionView(frame: .zero, collectionViewLayout: UICollectionViewLayout()) @@ -25,9 +31,9 @@ class GalleryViewController: UIViewController { $0.setAttributedTitle(NSAttributedString.styled(text: "사용", style: .heading1), for: .normal) $0.titleLabel?.font = .systemFont(ofSize: 20, weight: .semibold) $0.setTitleColor(.gray1, for: .normal) - $0.backgroundColor = .primaryOrange $0.layer.cornerRadius = 10 $0.addTarget(self, action: #selector(usingButtonTapped), for: .touchUpInside) + $0.backgroundColor = .primaryLight } override func viewDidLoad() { @@ -35,6 +41,18 @@ class GalleryViewController: UIViewController { setUI() setLayout() setupCollectionView() + setupNavigationBar() + } + + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + tabBarController?.tabBar.isHidden = true + connectAPI() + } + + override func viewWillDisappear(_ animated: Bool) { + super.viewWillDisappear(animated) + tabBarController?.tabBar.isHidden = false } private func setUI() { @@ -60,6 +78,175 @@ class GalleryViewController: UIViewController { } + private func setupNavigationBar() { + let customNavigationItem = CustomNavigationItem() + customNavigationItem.setUpNavigationBar(for: .back) + navigationItem.backBarButtonItem = customNavigationItem.backBarButtonItem + navigationItem.backBarButtonItem?.tintColor = .gray1 + navigationItem.title = "안전신문고 갤러리" + } + + @objc private func usingButtonTapped() { + print("사용 버튼이 눌렸습니다.") + } + + private func connectAPI() { + DispatchQueue.main.async { + self.networkManager.photoAPI { [weak self] result in + guard let self = self else { return } + + switch result { + case let .success(list): + + self.firstSectionPhotoList = list.filter({ + self.formatDateTime($0.createdAt!) == "2024년 10월 26일" + }) + .dropLast() + + + self.secondSectionPhotoList = list.filter({ + self.formatDateTime($0.createdAt!) == "2024년 11월 26일" + }) + .dropLast() + + self.collectionView.reloadData() + case let .failure(error): + print(error.localizedDescription) + } + + } + } + } + +} + +extension GalleryViewController: UICollectionViewDelegate { + func collectionView( + _ collectionView: UICollectionView, + viewForSupplementaryElementOfKind kind: String, + at indexPath: IndexPath + ) -> UICollectionReusableView { + guard kind == UICollectionView.elementKindSectionHeader, + let header = collectionView.dequeueReusableSupplementaryView( + ofKind: kind, + withReuseIdentifier: GalleryContentsSectionHeader.identifier, + for: indexPath + ) as? GalleryContentsSectionHeader else { + return UICollectionReusableView() + } + if indexPath.section == 2 { + let sectionTitles = "2024년 10월 26일" + header.configure(with: sectionTitles) + } else if indexPath.section == 3{ + let sectionTitles = "2024년 11월 26일" + header.configure(with: sectionTitles) + } + + return header + } + + func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { + guard let cell = collectionView.cellForItem(at: indexPath) as? ContentsCell else { return } + + let nextViewController = GalleryDetailViewController() + nextViewController.isChecked = cell.isChecked + nextViewController.indexPath = indexPath + + nextViewController.checkboxHandler = { [weak self] isChecked, indexPath in + guard let self = self else { return } + + if isChecked { + self.firstSectionCheckedStatus.insert(indexPath) + self.secondSectionCheckedStatus.insert(indexPath) + } else { + self.firstSectionCheckedStatus.remove(indexPath) + self.secondSectionCheckedStatus.remove(indexPath) + } + + self.collectionView.reloadData() + } + + if indexPath.section == 2 { + nextViewController.configure(item: firstSectionPhotoList[indexPath.row]) + + } else { + nextViewController.configure(item: secondSectionPhotoList[indexPath.row]) + } + + + self.navigationController?.pushViewController(nextViewController, animated: true) + } + +} + +extension GalleryViewController: UICollectionViewDataSource { + func numberOfSections(in collectionView: UICollectionView) -> Int { + return 4 + } + + func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) + -> Int { + switch section { + case 0: + return 1 + case 1: + return 1 + case 2: + return firstSectionPhotoList.count + case 3: + return secondSectionPhotoList.count + default: + return 0 + } + } + + func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) + -> UICollectionViewCell { + switch indexPath.section { + case 0: + guard let cell = collectionView.dequeueReusableCell( + withReuseIdentifier: MediaSelectCell.cellIdentifier, + for: indexPath + ) as? MediaSelectCell else { + return UICollectionViewCell(frame: .zero) + } + return cell + case 1: + guard let cell = collectionView.dequeueReusableCell( + withReuseIdentifier: WarningCell.cellIdentifier, + for: indexPath + ) as? WarningCell else { + return UICollectionViewCell(frame: .zero) + } + return cell + case 2: + guard let cell = collectionView.dequeueReusableCell( + withReuseIdentifier: ContentsCell.cellIdentifier, + for: indexPath + ) as? ContentsCell else { + return UICollectionViewCell(frame: .zero) + } + + cell.configure(item: firstSectionPhotoList[indexPath.row], isChecked: firstSectionCheckedStatus.contains(indexPath)) + + return cell + default: + guard let cell = collectionView.dequeueReusableCell( + withReuseIdentifier: ContentsCell.cellIdentifier, + for: indexPath.appending(9) + ) as? ContentsCell else { + return UICollectionViewCell(frame: .zero) + } + + cell.configure(item: secondSectionPhotoList[indexPath.row], isChecked: secondSectionCheckedStatus.contains(indexPath)) + + return cell + } + } + +} + +extension GalleryViewController { private func setupCollectionView() { collectionView.collectionViewLayout = createSection() collectionView.delegate = self @@ -72,8 +259,8 @@ class GalleryViewController: UIViewController { collectionView.register(ContentsCell.self, forCellWithReuseIdentifier: ContentsCell.cellIdentifier) collectionView.register(GalleryContentsSectionHeader.self, - forSupplementaryViewOfKind: UICollectionView.elementKindSectionHeader, - withReuseIdentifier: GalleryContentsSectionHeader.identifier + forSupplementaryViewOfKind: UICollectionView.elementKindSectionHeader, + withReuseIdentifier: GalleryContentsSectionHeader.identifier ) } @@ -172,7 +359,7 @@ class GalleryViewController: UIViewController { trailing: 17 ) section.boundarySupplementaryItems = [self.createSectionHeader()] // 헤더 추가 - + return section } @@ -189,122 +376,22 @@ class GalleryViewController: UIViewController { return sectionHeader } - - @objc private func usingButtonTapped() { - print("사용 버튼이 눌렸습니다.") - } - } -extension GalleryViewController: UICollectionViewDelegate { - func collectionView( - _ collectionView: UICollectionView, - viewForSupplementaryElementOfKind kind: String, - at indexPath: IndexPath - ) -> UICollectionReusableView { - guard kind == UICollectionView.elementKindSectionHeader, - let header = collectionView.dequeueReusableSupplementaryView( - ofKind: kind, - withReuseIdentifier: GalleryContentsSectionHeader.identifier, - for: indexPath - ) as? GalleryContentsSectionHeader else { - return UICollectionReusableView() - } - if indexPath.section == 2 { - let sectionTitles = "2024년 11월 14일" - header.configure(with: sectionTitles) - } else if indexPath.section == 3{ - let sectionTitles = "2024년 11월 13일" - header.configure(with: sectionTitles) - } +extension GalleryViewController { + private func formatDateTime(_ dateTime: String) -> String { + let inputFormatter = DateFormatter() + inputFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss" // 서버에서 받은 날짜 형식 - return header - } - - func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { - guard let cell = collectionView.cellForItem(at: indexPath) as? ContentsCell else { return } - - let nextViewController = GalleryDetailViewController() - nextViewController.isChecked = cell.isChecked - nextViewController.indexPath = indexPath + let outputFormatter = DateFormatter() + outputFormatter.dateFormat = "yyyy년 MM월 dd일" // 원하는 출력 형식 - nextViewController.checkboxHandler = { [weak self] isChecked, indexPath in - guard let self = self else { return } - - if let cell = self.collectionView.cellForItem(at: indexPath) as? ContentsCell { - // 체크박스 상태 업데이트 - cell.isChecked = isChecked - cell.checkbox.setImage( - isChecked ? .icnCheckboxISquareSelectedWhite24Px : .icnCheckboxISquareUnselectedWhite24Px, - for: .normal - ) - } + // 입력 문자열을 Date로 변환한 후, 다시 문자열로 변환 + if let date = inputFormatter.date(from: dateTime) { + return outputFormatter.string(from: date) + } else { + print("[Error] Invalid date format: \(dateTime)") + return dateTime // 변환 실패 시 원본 문자열 반환 } - - self.navigationController?.pushViewController(nextViewController, animated: true) } - -} - -extension GalleryViewController: UICollectionViewDataSource { - func numberOfSections(in collectionView: UICollectionView) -> Int { - return 4 - } - - func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) - -> Int { - switch section { - case 0: - return 1 - case 1: - return 1 - case 2: - return 6 - case 3: - return 6 - default: - return 0 - } - } - - func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) - -> UICollectionViewCell { - switch indexPath.section { - case 0: - guard let cell = collectionView.dequeueReusableCell( - withReuseIdentifier: MediaSelectCell.cellIdentifier, - for: indexPath - ) as? MediaSelectCell else { - return UICollectionViewCell(frame: .zero) - } - return cell - case 1: - guard let cell = collectionView.dequeueReusableCell( - withReuseIdentifier: WarningCell.cellIdentifier, - for: indexPath - ) as? WarningCell else { - return UICollectionViewCell(frame: .zero) - } - return cell - case 2: - guard let cell = collectionView.dequeueReusableCell( - withReuseIdentifier: ContentsCell.cellIdentifier, - for: indexPath - ) as? ContentsCell else { - return UICollectionViewCell(frame: .zero) - } - - return cell - default: - guard let cell = collectionView.dequeueReusableCell( - withReuseIdentifier: ContentsCell.cellIdentifier, - for: indexPath - ) as? ContentsCell else { - return UICollectionViewCell(frame: .zero) - } - - return cell - } - } - } diff --git a/saftyReport/saftyReport/Source/ReportDetail/ReportAddress/ReportAddressViewController.swift b/saftyReport/saftyReport/Source/ReportDetail/ReportAddress/ReportAddressViewController.swift index 20b59b4..fa87348 100644 --- a/saftyReport/saftyReport/Source/ReportDetail/ReportAddress/ReportAddressViewController.swift +++ b/saftyReport/saftyReport/Source/ReportDetail/ReportAddress/ReportAddressViewController.swift @@ -74,6 +74,17 @@ class ReportAddressViewController: UIViewController { setUI() setLayout() + setupNavigationBar() + } + + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + tabBarController?.tabBar.isHidden = true + } + + override func viewWillDisappear(_ animated: Bool) { + super.viewWillDisappear(animated) + tabBarController?.tabBar.isHidden = false } private func setUI() { @@ -136,6 +147,15 @@ class ReportAddressViewController: UIViewController { } } + private func setupNavigationBar() { + let customNavigationItem = CustomNavigationItem() + customNavigationItem.setUpNavigationBar(for: .back) + navigationItem.backBarButtonItem = customNavigationItem.backBarButtonItem + navigationItem.backBarButtonItem?.tintColor = .gray1 + navigationItem.title = "주소 입력" + } + + @objc private func searchKeywordButtonTapped() { print("키워드 검색 버튼이 눌렸습니다.") } diff --git a/saftyReport/saftyReport/Source/ReportDetail/ReportDetailViewController.swift b/saftyReport/saftyReport/Source/ReportDetail/ReportDetailViewController.swift index ff488e1..cc7d6de 100644 --- a/saftyReport/saftyReport/Source/ReportDetail/ReportDetailViewController.swift +++ b/saftyReport/saftyReport/Source/ReportDetail/ReportDetailViewController.swift @@ -94,6 +94,7 @@ class ReportDetailViewController: UIViewController { let customNavigationItem = CustomNavigationItem() customNavigationItem.setUpNavigationBar(for: .back) navigationItem.backBarButtonItem = customNavigationItem.backBarButtonItem + navigationItem.backBarButtonItem?.tintColor = .gray1 navigationItem.title = "신고하기" navigationController?.setNavigationBarHidden(false, animated: false)