From 6286b4161f26681133325fcec2f079d2c647aae8 Mon Sep 17 00:00:00 2001 From: hhyukjin Date: Fri, 2 Feb 2024 01:42:25 +0900 Subject: [PATCH] =?UTF-8?q?Design:=20=EC=B9=9C=EA=B5=AC=EB=AA=A9=EB=A1=9D?= =?UTF-8?q?=20ui=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit #11 --- iOS/Ringo/Ringo.xcodeproj/project.pbxproj | 8 +++ .../UserInterfaceState.xcuserstate | Bin 41588 -> 56888 bytes .../Ringo/ContactsNavigationController.swift | 48 +++++++++++++ iOS/Ringo/Ringo/ContactsViewController.swift | 65 +++++++++++++++++- .../Ringo/FriendRequestViewController.swift | 33 +++++++++ iOS/Ringo/Ringo/TabBarViewController.swift | 37 +++++++--- 6 files changed, 179 insertions(+), 12 deletions(-) create mode 100644 iOS/Ringo/Ringo/ContactsNavigationController.swift create mode 100644 iOS/Ringo/Ringo/FriendRequestViewController.swift diff --git a/iOS/Ringo/Ringo.xcodeproj/project.pbxproj b/iOS/Ringo/Ringo.xcodeproj/project.pbxproj index 3ff4811..3825fa0 100644 --- a/iOS/Ringo/Ringo.xcodeproj/project.pbxproj +++ b/iOS/Ringo/Ringo.xcodeproj/project.pbxproj @@ -11,6 +11,8 @@ 945603152B6AC22A002F4B33 /* ContactsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 945603142B6AC22A002F4B33 /* ContactsViewController.swift */; }; 945603172B6AC2D3002F4B33 /* RecentsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 945603162B6AC2D3002F4B33 /* RecentsViewController.swift */; }; 945603192B6AC365002F4B33 /* AccountViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 945603182B6AC365002F4B33 /* AccountViewController.swift */; }; + 9456031B2B6BD40B002F4B33 /* ContactsNavigationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9456031A2B6BD40B002F4B33 /* ContactsNavigationController.swift */; }; + 9456031D2B6BF44A002F4B33 /* FriendRequestViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9456031C2B6BF44A002F4B33 /* FriendRequestViewController.swift */; }; 945CF97B2B67E1CD00396E4E /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 945CF97A2B67E1CD00396E4E /* AppDelegate.swift */; }; 945CF97D2B67E1CD00396E4E /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 945CF97C2B67E1CD00396E4E /* SceneDelegate.swift */; }; 945CF97F2B67E1CD00396E4E /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 945CF97E2B67E1CD00396E4E /* ViewController.swift */; }; @@ -25,6 +27,8 @@ 945603142B6AC22A002F4B33 /* ContactsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContactsViewController.swift; sourceTree = ""; }; 945603162B6AC2D3002F4B33 /* RecentsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecentsViewController.swift; sourceTree = ""; }; 945603182B6AC365002F4B33 /* AccountViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountViewController.swift; sourceTree = ""; }; + 9456031A2B6BD40B002F4B33 /* ContactsNavigationController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContactsNavigationController.swift; sourceTree = ""; }; + 9456031C2B6BF44A002F4B33 /* FriendRequestViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FriendRequestViewController.swift; sourceTree = ""; }; 945CF9772B67E1CD00396E4E /* Ringo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Ringo.app; sourceTree = BUILT_PRODUCTS_DIR; }; 945CF97A2B67E1CD00396E4E /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 945CF97C2B67E1CD00396E4E /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; @@ -70,7 +74,9 @@ 945CF97C2B67E1CD00396E4E /* SceneDelegate.swift */, 945CF97E2B67E1CD00396E4E /* ViewController.swift */, 945603122B6AC07D002F4B33 /* TabBarViewController.swift */, + 9456031A2B6BD40B002F4B33 /* ContactsNavigationController.swift */, 945603142B6AC22A002F4B33 /* ContactsViewController.swift */, + 9456031C2B6BF44A002F4B33 /* FriendRequestViewController.swift */, 945603162B6AC2D3002F4B33 /* RecentsViewController.swift */, 945603182B6AC365002F4B33 /* AccountViewController.swift */, 945CF9832B67E1CE00396E4E /* Assets.xcassets */, @@ -157,6 +163,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 9456031B2B6BD40B002F4B33 /* ContactsNavigationController.swift in Sources */, 945603132B6AC07D002F4B33 /* TabBarViewController.swift in Sources */, 945CF97F2B67E1CD00396E4E /* ViewController.swift in Sources */, 945603192B6AC365002F4B33 /* AccountViewController.swift in Sources */, @@ -164,6 +171,7 @@ 945603172B6AC2D3002F4B33 /* RecentsViewController.swift in Sources */, 945CF97D2B67E1CD00396E4E /* SceneDelegate.swift in Sources */, 945603152B6AC22A002F4B33 /* ContactsViewController.swift in Sources */, + 9456031D2B6BF44A002F4B33 /* FriendRequestViewController.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/iOS/Ringo/Ringo.xcodeproj/project.xcworkspace/xcuserdata/jinhyuk.xcuserdatad/UserInterfaceState.xcuserstate b/iOS/Ringo/Ringo.xcodeproj/project.xcworkspace/xcuserdata/jinhyuk.xcuserdatad/UserInterfaceState.xcuserstate index 63a10e8dbc9846789bf30256c224c7267695b439..8582104f7fd1c70eb0519b261523a82acf721f65 100644 GIT binary patch literal 56888 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 delta 19305 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 ContactsNavigationController { + return ContactsNavigationController() + } + + func updateUIViewController(_ uiViewController: ContactsNavigationController, context: Context) { + } + + typealias UIViewControllerType = ContactsNavigationController + +} +@available(iOS 13.0.0, *) +struct ContactsNavigationViewPreview: PreviewProvider { + static var previews: some View { + ContactsNavigationControllerRepresentable().edgesIgnoringSafeArea(.all) + } +} diff --git a/iOS/Ringo/Ringo/ContactsViewController.swift b/iOS/Ringo/Ringo/ContactsViewController.swift index f58c4fc..502c27f 100644 --- a/iOS/Ringo/Ringo/ContactsViewController.swift +++ b/iOS/Ringo/Ringo/ContactsViewController.swift @@ -6,14 +6,53 @@ // import UIKit +import SnapKit -class ContactsViewController: UIViewController { +class ContactsViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { + + let randomNames = ["민준", "서준", "예준", "도윤", "시우", "주원", "하준", "지호", "지후", "준서", "준우", "현우", "도현", "지훈", "건우", "우진", "선우", "서진", "민재", "현준", "연우", "유준", "정우", "승우", "승현", "시윤", "준혁", "은우", "지환", "승민", "지우", "유찬", "윤우", "민성", "준영", "시후", "진우", "지수", "서연", "서윤", "지우", "서현", "민서", "하은", "하윤", "윤서", "지유", "지민", "채원", "지윤", "은서", "수아", "다은", "예은", "지아", "수빈", "소율", "예린", "예원", "지원", "소윤", "지안", "하린", "시은", "유진", "채은"] + + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + return randomNames.count + } + + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) + cell.textLabel?.text = randomNames[indexPath.row] + + return cell + } + + let searchController = UISearchController() + var tableView: UITableView! + override func viewDidLoad() { super.viewDidLoad() - view.backgroundColor = .red - // Do any additional setup after loading the view. + view.backgroundColor = .white + +// navigationItem.largeTitleDisplayMode = .inline + + //navigation + self.navigationItem.title = "Contacts" + self.navigationController?.navigationBar.prefersLargeTitles = true + self.navigationItem.searchController = searchController + self.navigationItem.hidesSearchBarWhenScrolling = false + self.navigationItem.rightBarButtonItem = UIBarButtonItem(image: UIImage(systemName: "person.badge.plus"), style: .plain, target: self, action: #selector(requestFriend)) + + //table + tableView = UITableView(frame: CGRect(x: 0, y: 0, width: self.view.bounds.width, height: self.view.bounds.height)) + tableView.register(UITableViewCell.self, forCellReuseIdentifier: "Cell") + tableView.delegate = self + tableView.dataSource = self + self.view.addSubview(tableView) + + } + + //navigaion rightBtn action + @objc private func requestFriend(_ sender: UIBarButtonItem) { + self.navigationController?.pushViewController(FriendRequestViewController(), animated: true) } @@ -28,3 +67,23 @@ class ContactsViewController: UIViewController { */ } +// canvas 이용하기 +import SwiftUI + +struct ContactsViewControllerRepresentable: UIViewControllerRepresentable { + func makeUIViewController(context: Context) -> ContactsViewController { + return ContactsViewController() + } + + func updateUIViewController(_ uiViewController: ContactsViewController, context: Context) { + } + + typealias UIViewControllerType = ContactsViewController + +} +@available(iOS 13.0.0, *) +struct ContactsViewPreview: PreviewProvider { + static var previews: some View { + ContactsViewControllerRepresentable().edgesIgnoringSafeArea(.all) + } +} diff --git a/iOS/Ringo/Ringo/FriendRequestViewController.swift b/iOS/Ringo/Ringo/FriendRequestViewController.swift new file mode 100644 index 0000000..7e38787 --- /dev/null +++ b/iOS/Ringo/Ringo/FriendRequestViewController.swift @@ -0,0 +1,33 @@ +// +// FriendRequestViewController.swift +// Ringo +// +// Created by 강진혁 on 2/2/24. +// + +import UIKit + +class FriendRequestViewController: UIViewController { + + override func viewDidLoad() { + super.viewDidLoad() + + view.backgroundColor = .brown + + self.navigationItem.title = "Request Friend" + self.navigationItem.largeTitleDisplayMode = .never + // Do any additional setup after loading the view. + } + + + /* + // MARK: - Navigation + + // In a storyboard-based application, you will often want to do a little preparation before navigation + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + // Get the new view controller using segue.destination. + // Pass the selected object to the new view controller. + } + */ + +} diff --git a/iOS/Ringo/Ringo/TabBarViewController.swift b/iOS/Ringo/Ringo/TabBarViewController.swift index c733048..249d3ea 100644 --- a/iOS/Ringo/Ringo/TabBarViewController.swift +++ b/iOS/Ringo/Ringo/TabBarViewController.swift @@ -13,19 +13,38 @@ class TabBarViewController: UITabBarController{ override func viewDidLoad() { super.viewDidLoad() - let contactsVC = UINavigationController(rootViewController: ContactsViewController()) + tabBar.backgroundColor = .init(white: 1, alpha: 0.8) + +// let contactsVC = UINavigationController(rootViewController: ContactsViewController()) + let contactsVC = ContactsNavigationController() let recentsVC = RecentsViewController() let accountVC = AccountViewController() - contactsVC.title = "Contacts" - recentsVC.title = "Recents" - accountVC.title = "Account" - - contactsVC.tabBarItem.image = UIImage(systemName: "person.3") - recentsVC.tabBarItem.image = UIImage(systemName: "clock") - accountVC.tabBarItem.image = UIImage(systemName: "person.text.rectangle") + contactsVC.tabBarItem = UITabBarItem(title: "Contacts", image: UIImage(systemName: "person.3"), tag: 1) + recentsVC.tabBarItem = UITabBarItem(title: "Recents", image: UIImage(systemName: "clock"), tag: 2) + accountVC.tabBarItem = UITabBarItem(title: "Account", image: UIImage(systemName: "person.text.rectangle"), tag: 3) - setViewControllers([contactsVC,recentsVC,accountVC], animated: true) + setViewControllers([contactsVC,recentsVC,accountVC], animated: false) + } +} + +// canvas 이용하기 +import SwiftUI + +struct TabBarViewControllerRepresentable: UIViewControllerRepresentable { + func makeUIViewController(context: Context) -> TabBarViewController { + return TabBarViewController() } + func updateUIViewController(_ uiViewController: TabBarViewController, context: Context) { + } + + typealias UIViewControllerType = TabBarViewController + +} +@available(iOS 13.0.0, *) +struct TabBarViewPreview: PreviewProvider { + static var previews: some View { + TabBarViewControllerRepresentable().edgesIgnoringSafeArea(.all) + } }