iOS/UIKit(59)
-
[UIkit] 이미지 사이즈에 따른 동적 컬렉션뷰 셀
🧸 시작컬렉션뷰셀이 이미지 사이즈에 따라 셀의 사이즈도 바뀐다! 🧸 폴더로 이동한다.import UIKitimport DesignSystemclass CustomCollectionViewController: UIViewController, UICollectionViewDelegate { var collectionView: UICollectionView! var imageList: [UIImage] = [] override func viewDidLoad() { super.viewDidLoad() // 이미지 목록 초기화 imageList = [ DesignSystemDemoAppAsset.shirt..
2025.02.03 -
[알고리즘] Swift -프로그래머스 연습문제 #258712(카카오 인턴십_가장 많이 받은 선물)
문제링크https://school.programmers.co.kr/learn/courses/30/lessons/258712 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 분석 선물을 직접 전하기 힘들 때 카카오톡 선물하기 기능을 이용해 축하 선물을 보낼 수 있습니다. 당신의 친구들이 이번 달까지 선물을 주고받은 기록을 바탕으로 다음 달에 누가 선물을 많이 받을지 예측하려고 합니다. 두 사람이 선물을 주고받은 기록이 있다면, 이번 달까지 두 사람 사이에 더 많은 선물을 준 사람이 다음 달에 선물을 하나 받습니다. 예를 들어 A가 B에게 선물을 5번 줬고, (A -> B) B가 A에게 선물을 3번 ..
2024.11.13 -
[UIKit] 텍스트필드 입력(클릭) 시 키보드 올리기/내리기 (3): Rxswift
🧸 시작2024.11.08 - [SWIFT/UIKit] - [UIKit] 텍스트필드 입력(클릭) 시 키보드 올리기/내리기 (2): Snpakit [UIKit] 텍스트필드 입력(클릭) 시 키보드 올리기/내리기 (2): Snpakit🧸 시작이전 글에서는 스토리보드를 활용해 키보드가 올라오거나 내려갈 때마다 제약조건을 변경해 UI를 조정하는 방법을 사용했다. 이번 글에서는 코드 기반의 접근 방법으로 동일한 작업을nlestory.tistory.com 이전 글에서는 Snapkit과 NotificationCenter를 사용하여 키보드 이벤트를 처리하는 방법을 다뤘다면, 이번에는 RxSwift로 이 과정을 좀 더 간결하고 반응형으로 구현하는 방법을 구현할 예정이다.RxSwift를 활용하면 Notification..
2024.11.12 -
[UIKit] 텍스트필드 입력(클릭) 시 키보드 올리기/내리기 (2): Snpakit
🧸 시작이전 글에서는 스토리보드를 활용해 키보드가 올라오거나 내려갈 때마다 제약조건을 변경해 UI를 조정하는 방법을 사용했다. 이번 글에서는 코드 기반의 접근 방법으로 동일한 작업을 구현하려 한다. Snapkit 라이브러리를 이용하여 코드 기반 레이아웃 설정을 중심으로 다룰 것이다. 키보드가 화면을 가리는 문제를 해결하고 레이아웃을 조정하는 방법에 대해 설명할 것이다. 이 과정에서 NotificationCenter 을 사용한 키보드 알림 처리와 Snapkit을 사용하면서 유용한 방법을 소개할 것이다. 🧸 UI 구현먼저 스토리보드를 사용하지 않고 코드베이스로 UI를 구현하기 위해서 세팅을 해준다. 처음 세팅 방법은 아래 글을 참조하면 된다.초기 프로젝트 코드베이스로 세팅하기 [UIKit] 스토리보드..
2024.11.08 -
[UIkit] Xcode pbxproj 충돌 해결방법
🧸 시작xcode의 프로젝트 패키지인 .pbxproj의 파일에서 충돌이 났을 경우에 어떻게 해결해야할 지 정말 귀찮은 일이다.일단 .pbxproj 파일은 프로젝의 파일이랑 폴더에 대한 정보를 가지고 있어 파일/폴더 추가, 수정 삭제 등의 내용이 반영된다.계속 파일이 추가되는 상황에서 여러 명의 사람이서 프로젝트를 할 경우에 자꾸 충돌이 나면 정말 화가 난다.그래서 이를 빠르게 해결하는 방법이 있다. 🧸 .git 파일이 존재하는 폴더로 이동한 후 .gitattributes 파일 생성vi .gitattributes명령어를 입력하던지 파일을 추가하여 .gitattributes 파일을 생성한다. 🧸 .gitattributes 파일을 열어 내용 추가*.pbxproj binary merge=union이렇게 ..
2024.05.20 -
[UIKit] Thread 16: "*** +[NSURLComponents setPercentEncodedQueryItems:]: invalid characters in percentEncodedQueryItems"
🧸 시작 Thread 16: "*** +[NSURLComponents setPercentEncodedQueryItems:]: invalid characters in percentEncodedQueryItems" 에러 발생 setPercentEncodedQueryItems: 인코딩된 백분율의 잘못된 문자항목 쿼리 유요하지 않은 문자가 쿼리항목으로 가서 에러가 발생한 경우이다. 🧸 에러 발생한 기존 코드 func asURLRequest(completion: @escaping (URLRequest) -> Void) { guard var urlComponents = URLComponents(string: Constants.APIURL.KakaoAPI.searchURL) else { return } urlComp..
2023.05.06 -
[UIKit] 테이블뷰 섹션 타이틀 폰트 설정
🧸 시작 변경 전 변경 후 🧸 코드 var tableViewSectionHeader = ["즐겨찾기", "내 주변 병원"] extension HomeViewController: UITableViewDelegate, UITableViewDataSource { //섹션의 개수 func numberOfSections(in tableView: UITableView) -> Int { return tableViewSectionHeader.count } //섹션의 타이틀 텍스트 func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? { return tableViewSectionHeader[section] } //..
2023.05.05 -
[UIKit] Thread 1: "-[NSLayoutConstraint center]: unrecognized selector sent to instance 0x6000030d12c0"
🧸 시작 Thread 1: "-[NSLayoutConstraint center]: unrecognized selector sent to instance 0x6000030d12c0" 이러한 에러 발생 NSLayoutConstraint center 를 사용하고 싶은 데 연결된 인스턴스가 그것을 찾을 수 없다는 뜻 ? 째든 이 에러는 컴포넌트연결이 잘못되었다는 뜻 내가 사용하고자하는 컴포넌트와 연결이 되었는 지 잘 확인해보면 된다. 오른쪽 창에서 자신이 원하는 것과 연결이 되었는 지 확인한다. UIViewController 에서도 왼쪽 동그라미가 채워졌는 지 확인하고 채운 것이 내가 원하는 것과 연결이 잘 되었는 지 확인한다. 스토리보드를 사요하다보면 컴포넌트들이 너무 많아져서 실수하는 것 같다 ..
2023.04.06 -
[UIKit] info파일 이동하기
🧸 시작 Build input file cannot be found: '/Users/.../Info.plist'. Did you forget to declare this file as an output of a script phase or custom build rule which produces it? info파일을 다른 폴더로 이동했더니 빌드가 안된다 ㅎㅎ 위의 에러가 발생한다. 이를 해결하기 위한 방법이다. 🧸 info.plist 파일을 클릭한다. Info파일을 클릭하면 오른쪽에 Location을 Relative to Project로 변경해준다. 🧸 Project > Build Settings > Packing 으로 이동 Build Settings으로 이동한 다음 검색으로 info.plist을 한다..
2023.03.29 -
[UIKit] 웹이미지 다운받기(비동기 처리) -Closure, RxSwift
🧸 시작 이미지뷰와 버튼을 통해서 웹 이미지를 다운받아 보는 방법이다. 간단하게 버튼을 누르면 이미지가 나타나는 기능을 구현할 것이다. 이번에는 코드베이스가 아닌 스토리보드로 진행할 것이다. 🧸 스토리보드에 ImageView(이미지뷰)와 Button(버튼)을 추가한다. import UIKit class ViewController: UIViewController { @IBOutlet weak var imageView: UIImageView! @IBOutlet weak var loadImageBtn: UIButton! override func viewDidLoad() { super.viewDidLoad() } @IBAction func didTabLoadImageBtn(_ sender: Any) { } } ..
2023.03.05 -
[UIKit] No StroyBoard -TableViewCell (테이블뷰셀) 내부의 버튼이 클릭되지 않을 때
🧸 시작 테이블뷰셀에 버튼을 만들어서 클릭 이벤트를 주었지만 작동하지 않았다. 테이블뷰셀을 클릭하는 것은 작동되었으나 내부에 있는 버튼은 클릭이 되지 않았다. 🧸 문제 해결하기 처음에는 생명주기나 호출의 문제로 생각했지만 뷰의 계층적인 문제였다. 계층을 보게되면 파란색 네모박스는 버튼이고 버튼 앞에 contentView 라는 것이 존재했다. 그러니 아무리 클릭을 해도 버튼을 클릭하는 것이 아니라 뷰를 클릭하게 된 것이다. 코드베이스로 뷰를 작성하면서 테이블뷰셀의 컴포넌트들을 추가하는 뷰가 잘못되었다. func setAddSubViews() { self.addSubview(loadIV) self.addSubview(loadPV) self.addSubview(loadBtn) } 기존에는 self.addSub..
2023.03.01 -
[UIKit] No StroyBoard -Navigation Controller (네비게이션 컨트롤러)와 TabBar Controller (탭바컨트롤러) 만들기
🧸 네이베이션 컨트롤러 ✔️ 네비게이션 컨트롤러 생성하기 func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { //윈도우 씬을 가져온다 guard let windowScene = (scene as? UIWindowScene) else { return } //윈도우 크기 설정 window = UIWindow(frame: UIScreen.main.bounds) //뷰컨트롤러 인스턴스 생성 let vc = ViewController() //네비게이션 컨트롤러 설정 let navVC = UINavigationController(rootViewCo..
2023.03.01 -
[UIKit] No StroyBoard -ViewController에서 View와 Controller 분리하기
🧸 시작 MVC 패턴을 하려고하면 view와 controller가 분리되어있는데 스토리보드를 이용하면 view로 볼 수 있지만 코드베이스로 구성하게 되면 이제 ViewController에 작성하게 되면서 코드가 엄청 길어진다. view를 그리는 부분과 관리하는 부분으로 나눠서 작성하면 보기에도 빠르고 편해진다. 🧸 View 파일 생성하기 [New file...] -> [Cocoa Touch Class] -> UIView 파일 생성 🧸 View 파일 작성하기 import UIKit import SnapKit class View: UIView { lazy var redBtn: UIButton = { let btn = UIButton() btn.backgroundColor = .systemRed btn.set..
2023.03.01 -
[UIKit] Snapkit (스냅킷) 사용해보기
🧸 시작 코드베이스를 도와주는 snapkit 라이브러리를 사용해서 화면을 생성해보자~ 🧸 스냅킷 설치 2023.02.28 - [PROJECT/iOS] - [iOS/Swift] pod 설치방법 [iOS/Swift] pod 설치방법 2022.08.14 - [PROJECT/iOS] - [iOS/Swift] 스토리보드 없는 프로젝트 세팅 [iOS/Swift] 스토리보드 없는 프로젝트 세팅 프로젝트 생성 Main Interface 부분 삭제 Main 스토리보드 삭제 Info.plist 파일에서 스토리보드 nlestory.tistory.com 이제 준비는 끝 viewController 에서 화면을 만들어준다. 🧸 화면에 보여줄 버튼을 생성하고 뷰에 추가한다. import UIKit class ViewControl..
2023.02.28 -
[UIKit] 버튼 클릭 후 사파리 URL 열기
임포트 한 후 import SafariServices 버튼이벤트 @IBAction func didTabLinkBtn(_ sender: Any) { let url = NSURL(string: "https://www.naver.com/") let urlView: SFSafariViewController = SFSafariViewController(url: url! as URL) self.present(urlView, animated: true, completion: nil) } 여기에서 URL주소를 정확하게 입력해줘야한다. let url = NSURL(string: "URL주소 입력") 결과
2022.09.16 -
[UIKit] 뷰컨트롤러(ViewController) Dismiss 후 데이터 전달 -델리게이트 패턴
https://nlestory.tistory.com/155 [Design Pattern] 디자인패턴 -델리게이트 패턴 (Delegate Pattern) 👉 Delegate 란? 사전적의미는 '위임하다'라는 뜻이다. 즉 위임자를 갖고 객체가 다른 객체에게 자신의 일을 위임하는 형태 👉 이벤트를 전달하는 방식 만약에 A뷰컨트롤러에서 B뷰컨트롤러로 이 nlestory.tistory.com 두개의 뷰컨트롤러가 있을 때 첫번째 VC에서 두번째 VC로 이동 후 두번째 VC의 텍스트필드의 데이터를 첫번째 VC의 라벨로 받아올 것이다 화면 이동 IBAction 을 이용하여 버튼을 클릭했을 때 두번째 VC로 이동한다 두번째 VC에 닫기버튼도 추가한다 프로토콜 생성 (첫번째 VC에서 진행) 프로토콜 상속 fix버튼 클릭..
2022.09.01 -
[UIKit] 테이블뷰 셀안에 있는 버튼 클릭 이벤트 처리하기 (자세히) -델리게이트 패턴
테이블뷰 클릭이벤트만들기 (참고) 더보기 2022.08.14 - [STUDY(스터디)/iOS] - [iOS/Swift] 테이블뷰 만들기 & 테이블뷰 셀 클릭이벤트 [iOS/Swift] 테이블뷰 만들기 & 테이블뷰 셀 클릭이벤트 스토리보드에 테이블뷰를 추가한다. 스토리보드의 테이블뷰를 뷰컨트롤러에 선언해준다 @IBOutlet weak var myTableView: UITableView! 테이블뷰셀을 만든다 새로운 파일 추가하여 Cocoa Touch Class에서 UITabl.. nlestory.tistory.com 테이블뷰셀에 있는 버튼 클릭이벤트 만들기 테이블뷰셀파일에서 IBAction을 만들어준다 셀을 클릭하면 뷰컨트롤러에서 설정해준 셀클릭이벤트 함수가 호출되고 버튼을 클릭하면 테이블뷰셀에서 설정해준 ..
2022.09.01 -
[UIKit] 카카오 (다음) 지도 API 마커추가하기
2022.08.14 - [STUDY(스터디)/iOS] - [iOS/Swift] 카카오 (다음) 지도 API 사용하기 [iOS/Swift] 카카오 (다음) 지도 API 사용하기 SDK 다운로드 https://apis.map.kakao.com/ios/guide/#step1 내 애플리케이션 추가하기 https://developers.kakao.com/console/app 카카오계정 로그인 여기를 눌러 링크를 확인하세요. accounts.kakao.com iOS추가.. nlestory.tistory.com var mapPoint: MTMapPoint? var poiItem: MTMapPOIItem? override func viewDidLoad() { super.viewDidLoad() configureLoca..
2022.08.31 -
[UIKit] Snapkit(스냅킷) 테이블뷰셀 오토레이아웃 (라벨길이에 따른 가변적 높이 설정)
🧸 시작 스냅킷라이브러리를 사용하여 테이블뷰셀을 만들어보았다. 테이블뷰 셀에 라벨이 있는 데 그 라벨의 텍스트 길이가 유동적으로 변경되는 식으로 진행했다. 그 때 텍스트가 잘리지 않게 오토레이아웃을 잡는 방법을 적용하였다. 🧸 테이블뷰 높이를 동적 할당 //MARK: - 테이블뷰 관련 extension SearchViewController: UITableViewDelegate, UITableViewDataSource { func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return 10 } func tableView(_ tableView: UITableView, cellForRowAt indexPath..
2022.08.25 -
[UIKit] SwiftUI Preview 맛보기
#if DEBUG import SwiftUI struct ViewControllerRepresentable: UIViewControllerRepresentable { func updateUIViewController(_ uiView: UIViewController,context: Context) { // leave this empty } @available(iOS 13.0.0, *) func makeUIViewController(context: Context) -> UIViewController{ HomeVC() } } @available(iOS 13.0, *) struct ViewControllerRepresentable_PreviewProvider: PreviewProvider { static var..
2022.08.14