From e32ca9af3b56fa11ec07bb53e9689eea8423d995 Mon Sep 17 00:00:00 2001 From: mmaybei Date: Fri, 12 Jul 2024 22:30:46 +0900 Subject: [PATCH] =?UTF-8?q?feat/#162=20=EB=82=B4=20=EB=AA=A8=EC=9E=84=20?= =?UTF-8?q?=EB=A6=AC=EC=8A=A4=ED=8A=B8=20UI=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- KkuMulKum.xcodeproj/project.pbxproj | 30 ++++-- KkuMulKum/Application/SceneDelegate.swift | 2 +- .../Icon/ic_groupPlus.imageset/Contents.json | 21 +++++ .../Icon/ic_groupPlus.imageset/ic_grpplus.svg | 3 + .../icon_groupPlus.imageset/Contents.json | 12 --- .../icon_groupPlus.imageset/groupPlus.svg | 3 - .../Source/Core/MainTabBarController.swift | 2 +- .../GroupList/GroupListViewController.swift | 35 ------- .../MeetingList/MeetingDummyModel.swift | 29 ++++++ .../MeetingList/MeetingListHeader.swift | 12 +++ .../Source/MeetingList/MeetingListView.swift | 84 +++++++++++++++++ .../MeetingListViewController.swift | 93 +++++++++++++++++++ .../MeetingList/MeetingTableViewCell.swift | 75 +++++++++++++++ 13 files changed, 342 insertions(+), 59 deletions(-) create mode 100644 KkuMulKum/Resource/Assets.xcassets/Icon/ic_groupPlus.imageset/Contents.json create mode 100644 KkuMulKum/Resource/Assets.xcassets/Icon/ic_groupPlus.imageset/ic_grpplus.svg delete mode 100644 KkuMulKum/Resource/Assets.xcassets/Icon/icon_groupPlus.imageset/Contents.json delete mode 100644 KkuMulKum/Resource/Assets.xcassets/Icon/icon_groupPlus.imageset/groupPlus.svg delete mode 100644 KkuMulKum/Source/GroupList/GroupListViewController.swift create mode 100644 KkuMulKum/Source/MeetingList/MeetingDummyModel.swift create mode 100644 KkuMulKum/Source/MeetingList/MeetingListHeader.swift create mode 100644 KkuMulKum/Source/MeetingList/MeetingListView.swift create mode 100644 KkuMulKum/Source/MeetingList/MeetingListViewController.swift create mode 100644 KkuMulKum/Source/MeetingList/MeetingTableViewCell.swift diff --git a/KkuMulKum.xcodeproj/project.pbxproj b/KkuMulKum.xcodeproj/project.pbxproj index 19d358db..1761586f 100644 --- a/KkuMulKum.xcodeproj/project.pbxproj +++ b/KkuMulKum.xcodeproj/project.pbxproj @@ -61,6 +61,10 @@ 78B9286E2C29402C006D9942 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78B9286D2C29402C006D9942 /* SceneDelegate.swift */; }; 78B928752C29402E006D9942 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 78B928742C29402E006D9942 /* Assets.xcassets */; }; 78B928782C29402E006D9942 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 78B928762C29402E006D9942 /* LaunchScreen.storyboard */; }; + A3DD9C232C4112EB00E58A13 /* MeetingListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3DD9C222C4112EB00E58A13 /* MeetingListView.swift */; }; + A3DD9C252C4133CD00E58A13 /* MeetingTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3DD9C242C4133CD00E58A13 /* MeetingTableViewCell.swift */; }; + A3DD9C272C41383200E58A13 /* MeetingDummyModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3DD9C262C41383200E58A13 /* MeetingDummyModel.swift */; }; + A3DD9C292C41653700E58A13 /* MeetingListHeader.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3DD9C282C41653600E58A13 /* MeetingListHeader.swift */; }; A3FB184D2C3BF45F001483E5 /* MakeMeetingsRequestModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3FB184C2C3BF45F001483E5 /* MakeMeetingsRequestModel.swift */; }; A3FB184F2C3BF4BC001483E5 /* MakeMeetingsResponseModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3FB184E2C3BF4BB001483E5 /* MakeMeetingsResponseModel.swift */; }; A3FB18512C3BF531001483E5 /* RegisterMeetingsResponseModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3FB18502C3BF531001483E5 /* RegisterMeetingsResponseModel.swift */; }; @@ -83,7 +87,7 @@ DD931B762C3DC16100526452 /* PromiseInfoView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD931B752C3DC16100526452 /* PromiseInfoView.swift */; }; DDA2EE732C385EB9007C6059 /* MainTabBarController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDA2EE722C385EB9007C6059 /* MainTabBarController.swift */; }; DDA2EE752C385FB1007C6059 /* HomeViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDA2EE742C385FB1007C6059 /* HomeViewController.swift */; }; - DDA2EE772C385FC3007C6059 /* GroupListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDA2EE762C385FC3007C6059 /* GroupListViewController.swift */; }; + DDA2EE772C385FC3007C6059 /* MeetingListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDA2EE762C385FC3007C6059 /* MeetingListViewController.swift */; }; DDAF1C7C2C3D5B86008A37D3 /* RxCocoa in Frameworks */ = {isa = PBXBuildFile; productRef = DDAF1C7B2C3D5B86008A37D3 /* RxCocoa */; }; DDAF1C7E2C3D5B86008A37D3 /* RxRelay in Frameworks */ = {isa = PBXBuildFile; productRef = DDAF1C7D2C3D5B86008A37D3 /* RxRelay */; }; DDAF1C812C3D5BD5008A37D3 /* Kingfisher in Frameworks */ = {isa = PBXBuildFile; productRef = DDAF1C802C3D5BD5008A37D3 /* Kingfisher */; }; @@ -171,6 +175,10 @@ 78B928742C29402E006D9942 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 78B928772C29402E006D9942 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 78B928792C29402E006D9942 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + A3DD9C222C4112EB00E58A13 /* MeetingListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MeetingListView.swift; sourceTree = ""; }; + A3DD9C242C4133CD00E58A13 /* MeetingTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MeetingTableViewCell.swift; sourceTree = ""; }; + A3DD9C262C41383200E58A13 /* MeetingDummyModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MeetingDummyModel.swift; sourceTree = ""; }; + A3DD9C282C41653600E58A13 /* MeetingListHeader.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MeetingListHeader.swift; sourceTree = ""; }; A3FB184C2C3BF45F001483E5 /* MakeMeetingsRequestModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MakeMeetingsRequestModel.swift; sourceTree = ""; }; A3FB184E2C3BF4BB001483E5 /* MakeMeetingsResponseModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MakeMeetingsResponseModel.swift; sourceTree = ""; }; A3FB18502C3BF531001483E5 /* RegisterMeetingsResponseModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RegisterMeetingsResponseModel.swift; sourceTree = ""; }; @@ -193,7 +201,7 @@ DD931B752C3DC16100526452 /* PromiseInfoView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PromiseInfoView.swift; sourceTree = ""; }; DDA2EE722C385EB9007C6059 /* MainTabBarController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainTabBarController.swift; sourceTree = ""; }; DDA2EE742C385FB1007C6059 /* HomeViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeViewController.swift; sourceTree = ""; }; - DDA2EE762C385FC3007C6059 /* GroupListViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GroupListViewController.swift; sourceTree = ""; }; + DDA2EE762C385FC3007C6059 /* MeetingListViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MeetingListViewController.swift; sourceTree = ""; }; DDAF1C832C3D5D19008A37D3 /* ViewModelType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewModelType.swift; sourceTree = ""; }; DDAF1C882C3D6E3D008A37D3 /* ReadyStatusViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ReadyStatusViewController.swift; sourceTree = ""; }; DDAF1C892C3D6E3D008A37D3 /* PromiseSegmentedControl.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PromiseSegmentedControl.swift; sourceTree = ""; }; @@ -526,12 +534,16 @@ path = Home; sourceTree = ""; }; - DDA2EE7C2C38607F007C6059 /* GroupList */ = { + DDA2EE7C2C38607F007C6059 /* MeetingList */ = { isa = PBXGroup; children = ( - DDA2EE762C385FC3007C6059 /* GroupListViewController.swift */, + DDA2EE762C385FC3007C6059 /* MeetingListViewController.swift */, + A3DD9C222C4112EB00E58A13 /* MeetingListView.swift */, + A3DD9C242C4133CD00E58A13 /* MeetingTableViewCell.swift */, + A3DD9C262C41383200E58A13 /* MeetingDummyModel.swift */, + A3DD9C282C41653600E58A13 /* MeetingListHeader.swift */, ); - path = GroupList; + path = MeetingList; sourceTree = ""; }; DDA2EE7E2C3860B2007C6059 /* Core */ = { @@ -603,7 +615,7 @@ children = ( DDA2EE7E2C3860B2007C6059 /* Core */, DDA2EE7B2C386078007C6059 /* Home */, - DDA2EE7C2C38607F007C6059 /* GroupList */, + DDA2EE7C2C38607F007C6059 /* MeetingList */, DE159D312C406E1600425101 /* MyPage */, DE6D4D0E2C3F14D80005584B /* MeetingInfo */, DD865B652C3920F600C351A2 /* Onboarding */, @@ -1016,6 +1028,7 @@ 789873342C3D1A7B00435E96 /* LoginView.swift in Sources */, 782B40822C3E4925008B0CA7 /* NicknameViewModel.swift in Sources */, 782B406F2C3DBF93008B0CA7 /* ProfileViewController.swift in Sources */, + A3DD9C232C4112EB00E58A13 /* MeetingListView.swift in Sources */, A3FB18592C3BF77D001483E5 /* MeetingInfoResponseModel.swift in Sources */, DEA932182C3F180800FDF637 /* MeetingPromisesModel.swift in Sources */, DE159D342C406E1600425101 /* MyPageEtcSettingView.swift in Sources */, @@ -1041,9 +1054,11 @@ DE9E18922C3BCC9D00DB76B4 /* SocialLoginRequestModel.swift in Sources */, DE254AA82C3118EA00A4015E /* UIView+.swift in Sources */, DE254AAE2C31193600A4015E /* UIFont+.swift in Sources */, + A3DD9C292C41653700E58A13 /* MeetingListHeader.swift in Sources */, DE6D4D152C3F14D80005584B /* InvitationCodePopUpViewController.swift in Sources */, DE9E189A2C3BCCBE00DB76B4 /* UtilsTemp.swift in Sources */, 782B407B2C3E395A008B0CA7 /* WelcomeView.swift in Sources */, + A3DD9C272C41383200E58A13 /* MeetingDummyModel.swift in Sources */, DD3072142C3BF87A00416D9F /* NearestPromiseResponseModel.swift in Sources */, 782B407F2C3E44B7008B0CA7 /* WelcomeViewModel.swift in Sources */, DD3072162C3BFE4E00416D9F /* UpcomingPromiseListResponseModel.swift in Sources */, @@ -1051,7 +1066,7 @@ DE254AB22C31197B00A4015E /* UIButton+.swift in Sources */, DE6D4D162C3F14D80005584B /* MeetingInfoViewController.swift in Sources */, DE159D322C406E1600425101 /* MyPageAlarmSettingView.swift in Sources */, - DDA2EE772C385FC3007C6059 /* GroupListViewController.swift in Sources */, + DDA2EE772C385FC3007C6059 /* MeetingListViewController.swift in Sources */, 78B9286C2C29402C006D9942 /* AppDelegate.swift in Sources */, DEBA032F2C3C24F2002ED8F2 /* ModelType.swift in Sources */, 789AD4B52C3C0147002E2688 /* ResissueResponseModel.swift in Sources */, @@ -1061,6 +1076,7 @@ DE6D4D172C3F14D80005584B /* MeetingInfoViewModel.swift in Sources */, 78AED1372C3D98D1000AD80A /* NicknameView.swift in Sources */, A3FB185B2C3BF7DF001483E5 /* MeetingMembersResponseModel.swift in Sources */, + A3DD9C252C4133CD00E58A13 /* MeetingTableViewCell.swift in Sources */, DD3072222C3C0DA300416D9F /* PromiseParticipantListResponseModel.swift in Sources */, 789873322C3D1A7B00435E96 /* LoginViewController.swift in Sources */, 782B40722C3DBFA3008B0CA7 /* ProfileViewModel.swift in Sources */, diff --git a/KkuMulKum/Application/SceneDelegate.swift b/KkuMulKum/Application/SceneDelegate.swift index e75269f7..62c331cd 100644 --- a/KkuMulKum/Application/SceneDelegate.swift +++ b/KkuMulKum/Application/SceneDelegate.swift @@ -18,7 +18,7 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate { ) { guard let windowScene = (scene as? UIWindowScene) else { return } self.window = UIWindow(windowScene: windowScene) - self.window?.rootViewController = NicknameViewController() + self.window?.rootViewController = MeetingListViewController() self.window?.makeKeyAndVisible() } diff --git a/KkuMulKum/Resource/Assets.xcassets/Icon/ic_groupPlus.imageset/Contents.json b/KkuMulKum/Resource/Assets.xcassets/Icon/ic_groupPlus.imageset/Contents.json new file mode 100644 index 00000000..25adfe64 --- /dev/null +++ b/KkuMulKum/Resource/Assets.xcassets/Icon/ic_groupPlus.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "ic_grpplus.svg", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/KkuMulKum/Resource/Assets.xcassets/Icon/ic_groupPlus.imageset/ic_grpplus.svg b/KkuMulKum/Resource/Assets.xcassets/Icon/ic_groupPlus.imageset/ic_grpplus.svg new file mode 100644 index 00000000..03ab7a65 --- /dev/null +++ b/KkuMulKum/Resource/Assets.xcassets/Icon/ic_groupPlus.imageset/ic_grpplus.svg @@ -0,0 +1,3 @@ + + + diff --git a/KkuMulKum/Resource/Assets.xcassets/Icon/icon_groupPlus.imageset/Contents.json b/KkuMulKum/Resource/Assets.xcassets/Icon/icon_groupPlus.imageset/Contents.json deleted file mode 100644 index fb9b4d62..00000000 --- a/KkuMulKum/Resource/Assets.xcassets/Icon/icon_groupPlus.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "groupPlus.svg", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/KkuMulKum/Resource/Assets.xcassets/Icon/icon_groupPlus.imageset/groupPlus.svg b/KkuMulKum/Resource/Assets.xcassets/Icon/icon_groupPlus.imageset/groupPlus.svg deleted file mode 100644 index d31a2cb0..00000000 --- a/KkuMulKum/Resource/Assets.xcassets/Icon/icon_groupPlus.imageset/groupPlus.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/KkuMulKum/Source/Core/MainTabBarController.swift b/KkuMulKum/Source/Core/MainTabBarController.swift index beffd260..bd98daca 100644 --- a/KkuMulKum/Source/Core/MainTabBarController.swift +++ b/KkuMulKum/Source/Core/MainTabBarController.swift @@ -29,7 +29,7 @@ final class MainTabBarController: UITabBarController { $0.tabBarItem.image = .iconHome } - let groupListViewController: GroupListViewController = GroupListViewController().then { + let groupListViewController: MeetingListViewController = MeetingListViewController().then { $0.tabBarItem.title = "내 모임" $0.tabBarItem.image = .iconGroup } diff --git a/KkuMulKum/Source/GroupList/GroupListViewController.swift b/KkuMulKum/Source/GroupList/GroupListViewController.swift deleted file mode 100644 index b6e04122..00000000 --- a/KkuMulKum/Source/GroupList/GroupListViewController.swift +++ /dev/null @@ -1,35 +0,0 @@ -// -// GroupListViewController.swift -// KkuMulKum -// -// Created by YOUJIM on 7/6/24. -// - -import UIKit - -import SnapKit - -class GroupListViewController: BaseViewController { - private lazy var button: CustomButton = CustomButton(title: "모임 추가하기", isEnabled: true).then { - $0.addTarget(self, action: #selector(didAddScheduleButtonTapped), for: .touchUpInside) - } - - override func viewDidLoad() { - super.viewDidLoad() - - view.backgroundColor = .white - - view.addSubview(button) - - button.snp.makeConstraints { - $0.top.equalToSuperview().offset(206) - $0.leading.trailing.equalToSuperview().inset(20) - } - } - - @objc private func didAddScheduleButtonTapped() { - let scheduleViewController = PromiseViewController() - - self.navigationController?.pushViewController(scheduleViewController, animated: true) - } -} diff --git a/KkuMulKum/Source/MeetingList/MeetingDummyModel.swift b/KkuMulKum/Source/MeetingList/MeetingDummyModel.swift new file mode 100644 index 00000000..ccf915a9 --- /dev/null +++ b/KkuMulKum/Source/MeetingList/MeetingDummyModel.swift @@ -0,0 +1,29 @@ +// +// MeetingListModel.swift +// KkuMulKum +// +// Created by 예삐 on 7/12/24. +// + +import UIKit + +struct MeetingDummyModel { + let name: String + let count: Int +} + +extension MeetingDummyModel { + static func dummy() -> [MeetingDummyModel] { + return [ + MeetingDummyModel(name: "꾸물이들", count: 14), + MeetingDummyModel(name: "꾸물이들", count: 14), + MeetingDummyModel(name: "꾸물이들", count: 14), + MeetingDummyModel(name: "꾸물이들", count: 14), + MeetingDummyModel(name: "꾸물이들", count: 14), + MeetingDummyModel(name: "꾸물이들", count: 14), + MeetingDummyModel(name: "꾸물이들", count: 14), + MeetingDummyModel(name: "꾸물이들", count: 14), + MeetingDummyModel(name: "꾸물이들", count: 14) + ] + } +} diff --git a/KkuMulKum/Source/MeetingList/MeetingListHeader.swift b/KkuMulKum/Source/MeetingList/MeetingListHeader.swift new file mode 100644 index 00000000..682867b1 --- /dev/null +++ b/KkuMulKum/Source/MeetingList/MeetingListHeader.swift @@ -0,0 +1,12 @@ +// +// MeetingListHeader.swift +// KkuMulKum +// +// Created by 예삐 on 7/12/24. +// + +import UIKit + +final class MeetingListHeader: BaseView { + +} diff --git a/KkuMulKum/Source/MeetingList/MeetingListView.swift b/KkuMulKum/Source/MeetingList/MeetingListView.swift new file mode 100644 index 00000000..1169f5f4 --- /dev/null +++ b/KkuMulKum/Source/MeetingList/MeetingListView.swift @@ -0,0 +1,84 @@ +// +// GroupListView.swift +// KkuMulKum +// +// Created by 예삐 on 7/12/24. +// + +import UIKit + +import SnapKit +import Then + +final class MeetingListView: BaseView { + + + // MARK: - Property + + private let header = UIView() + + private let infoLabel = UILabel().then { + $0.setText("꾸물리안이 가입한 모임은\n총 3개예요!", style: .head01, color: .gray8) + } + + private let addButton = UIButton().then { + $0.backgroundColor = .green2 + $0.layer.cornerRadius = 8 + } + + private let addInfoView = UIStackView().then { + $0.axis = .horizontal + $0.spacing = 8 + $0.alignment = .fill + $0.distribution = .fill + } + + private let addInfoLabel = UILabel().then { + $0.setText("모임 추가하기", style: .body05, color: .green3) + } + + private let addIcon = UIImageView().then { + $0.image = .icGroupPlus + } + + lazy var tableView = UITableView(frame: .zero, style: .plain).then { + $0.backgroundColor = .clear + $0.showsVerticalScrollIndicator = false + $0.separatorStyle = .none + header.frame = CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: 170) + $0.tableHeaderView = header + } + + + // MARK: - UI Setting + + override func setupView() { + self.backgroundColor = .gray0 + addSubview(tableView) + header.addSubviews(infoLabel, addButton, addInfoView) + addInfoView.addArrangedSubviews(addIcon, addInfoLabel) + } + + override func setupAutoLayout() { + infoLabel.snp.makeConstraints { + $0.top.equalToSuperview().offset(24) + $0.leading.equalToSuperview() + } + + addButton.snp.makeConstraints { + $0.top.equalTo(infoLabel.snp.bottom).offset(16) + $0.leading.trailing.equalToSuperview() + $0.height.equalTo(48) + } + + addInfoView.snp.makeConstraints { + $0.centerY.equalTo(addButton.snp.centerY) + $0.centerX.equalTo(addButton.snp.centerX) + } + + tableView.snp.makeConstraints { + $0.leading.trailing.equalToSuperview().inset(20) + $0.top.bottom.equalToSuperview() + } + } +} diff --git a/KkuMulKum/Source/MeetingList/MeetingListViewController.swift b/KkuMulKum/Source/MeetingList/MeetingListViewController.swift new file mode 100644 index 00000000..e1bf5031 --- /dev/null +++ b/KkuMulKum/Source/MeetingList/MeetingListViewController.swift @@ -0,0 +1,93 @@ +// +// GroupListViewController.swift +// KkuMulKum +// +// Created by YOUJIM on 7/6/24. +// + +import UIKit + +import SnapKit + +class MeetingListViewController: BaseViewController { + + + // MARK: - Property + + private let rootView = MeetingListView() + + private var meetingList: [MeetingDummyModel] = MeetingDummyModel.dummy() { + didSet { + DispatchQueue.main.async { [weak self] in + self?.rootView.tableView.reloadData() + } + } + } + + + // MARK: - Initializer + + override func loadView() { + self.view = rootView + } + + override func viewDidLoad() { + super.viewDidLoad() + + view.backgroundColor = .gray0 + setupView() + register() + setupDelegate() + } + + + // MARK: - Function + + override func setupView() { + setupNavigationBar() + } + + private func register() { + rootView.tableView.register( + MeetingTableViewCell.self, forCellReuseIdentifier: MeetingTableViewCell.reuseIdentifier + ) + } + + override func setupDelegate() { + rootView.tableView.delegate = self + rootView.tableView.dataSource = self + } + + + // MARK: - Function + + private func setupNavigationBar() { + title = "내 모임" + + navigationController?.navigationBar.titleTextAttributes = [ + .foregroundColor: UIColor.gray8, + .font: UIFont.pretendard(.body03) + ] + } +} + +extension MeetingListViewController: UITableViewDelegate { + func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { + return 88 + } +} + +extension MeetingListViewController: UITableViewDataSource { + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + return meetingList.count + } + + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + guard let cell = rootView.tableView.dequeueReusableCell( + withIdentifier: MeetingTableViewCell.reuseIdentifier, for: indexPath + ) as? MeetingTableViewCell else { return UITableViewCell() } + cell.dataBind(meetingList[indexPath.item], itemRow: indexPath.item) + cell.selectionStyle = .none + return cell + } +} diff --git a/KkuMulKum/Source/MeetingList/MeetingTableViewCell.swift b/KkuMulKum/Source/MeetingList/MeetingTableViewCell.swift new file mode 100644 index 00000000..db42535b --- /dev/null +++ b/KkuMulKum/Source/MeetingList/MeetingTableViewCell.swift @@ -0,0 +1,75 @@ +// +// GroupViewCell.swift +// KkuMulKum +// +// Created by 예삐 on 7/12/24. +// + +import UIKit + +import SnapKit +import Then + +final class MeetingTableViewCell: BaseTableViewCell { + + + // MARK: - Property + + var itemRow: Int? + + private let cellView = UIView().then { + $0.backgroundColor = .white + $0.layer.cornerRadius = 8 + } + + private let nameLabel = UILabel() + + private let countLabel = UILabel() + + private let rightIcon = UIImageView().then { + $0.image = .iconRight + } + + + // MARK: - UI Setting + + override func setupView() { + self.do { + $0.backgroundColor = .clear + } + addSubviews(cellView, nameLabel, countLabel, rightIcon) + } + + override func setupAutoLayout() { + cellView.snp.makeConstraints { + $0.top.leading.trailing.equalToSuperview() + $0.height.equalTo(76) + } + + nameLabel.snp.makeConstraints { + $0.top.equalToSuperview().offset(16) + $0.leading.equalToSuperview().offset(20) + } + + countLabel.snp.makeConstraints { + $0.bottom.equalTo(cellView.snp.bottom).offset(-16) + $0.leading.equalToSuperview().offset(20) + } + + rightIcon.snp.makeConstraints { + $0.centerY.equalTo(cellView.snp.centerY) + $0.trailing.equalToSuperview().offset(-16) + } + } +} + + +// MARK: - Data Bind + +extension MeetingTableViewCell { + func dataBind(_ contentData: MeetingDummyModel, itemRow: Int) { + self.itemRow = itemRow + nameLabel.setText(contentData.name, style: .body03, color: .gray8) + countLabel.setText("\(contentData.count)명 참여 중", style: .caption02, color: .gray5) + } +}