SWIFT(60)
-
[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 -
[SwiftUI] SwiftUI 기초 -공식 튜토리얼(3)
🧸 이전 글 [SwiftUI] SwiftUI 기초 -공식 튜토리얼(2) 🧸 이전 글 [SwiftUI] SwiftUI 기초 -공식 튜토리얼(1) 🧸 시작 SwiftUI 로 앱 만들기 파일 만들기 Interface -> SwiftUI 로 변경하고 Next 🧸 Inspector 로 수정하기 command + 클릭해서 Show SwiftUI Inspector... 를 클릭 nlestory.tistory.com 🧸 시작 ✔️ 사용자 입력 처리 사용자는 자신이 좋아하는 장소에 플래그를 지정하고 목록을 필터링하여 자신이 좋아하는 장소만 표시할 수 있다. 이 기능을 만드려면 사용자가 자신의 즐겨찾기만 집중할 수 있도록 목록에 스위치를 추가한 다음 사용자가 랜드마크를 즐겨찾기로 표시하기 위해 탭하는 변 모양의 버튼을 추..
2023.05.04 -
[SwiftUI] SwiftUI 기초 -공식 튜토리얼(2)
🧸 이전 글 [SwiftUI] SwiftUI 기초 -공식 튜토리얼(1) 🧸 시작 SwiftUI 로 앱 만들기 파일 만들기 Interface -> SwiftUI 로 변경하고 Next 🧸 Inspector 로 수정하기 command + 클릭해서 Show SwiftUI Inspector... 를 클릭하면 해당 화면이 나오게 되는 데 여기에서 간편하 nlestory.tistory.com 🧸 시작 ✔️ 목록 및 네비게이션 구축 이전 글에 이어지는 내용으로 이번 튜토리얼에서는 모든 랜드마크에 대한 정보를 표시할 수 있는 보기를 만들고 사용자가 랜드마크에 대한 상세 보기를 보기 위해 누를 수 있는 스크롤 목록을 동적으로 생성한다. 🧸 랜드마크 모델 만들기 이전에는 하드코딩으로 정보를 입력했다면 이번에는 데이터를 저..
2023.05.04 -
[SwiftUI] SwiftUI 기초 -공식 튜토리얼(1)
🧸 시작 애플 디벨로퍼 공식 홈페이지에 있는 튜토리얼을 진행할 것이다. ✔️ 뷰 생성 및 결합 랜드마크의 세부 정보를 표시하는 뷰를 빌드하는 것으로 시작한다. 뷰를 배치하기 위해서 스택을 사용하여 이미지 및 텍스트 뷰를 구성한다. 지도를 추가하기 위해서 MapKit도 추가한다. 🧸 새 프로젝트 만들기 및 캔버스 탐색 SwiftUI 로 앱 만들기 파일 만들기 Interface -> SwiftUI 로 변경하고 Next 🧸 Inspector 로 수정하기 command + 클릭해서 Show SwiftUI Inspector... 를 클릭하면 해당 화면이 나오게 되는 데 여기에서 간편하게 변경할 수 있다. 아니면 스토리보드에서 사용하듯이 오른쪽 인스펙터화면을 늘려주면 간편하게 속성을 변경할 수 있다. 오른쪽에 보..
2023.05.03 -
[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 -
[iOS/Swift] RxSwift 기본 개념
👉 RxSwift 란? ‘RxSwift is a library for composing asynchronous and event-based code by using observable sequences and functional style operators, allowing for parameterized execution via schedulers. By Marin Todorov. ‘RxSwift — Reactive Programming with Swift.’ 관찰 가능한 시퀀스와 함수 스타일 연산자를 사용하여 비동기 및 이벤트 기반 코드를 구성하는 라이브러리이다. 새로운 데이터에 반응하며 순차적으로 처리하게 함으로써 비동기 프로그램을 쉽게 하도록 도와준다. ✔️ RxSwift 사용하는 이유 ? 비동기..
2023.03.05 -
[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 -
[iOS/Swift] pod 설치방법
🧸 시작 스냅킷은 코드베이스이기 때문에 스토리보드가 필요없다. 스토리보드 없는 프로젝트 세팅을 먼저 해주고 시작한다. 2022.08.14 - [PROJECT/iOS] - [iOS/Swift] 스토리보드 없는 프로젝트 세팅 [iOS/Swift] 스토리보드 없는 프로젝트 세팅 프로젝트 생성 Main Interface 부분 삭제 version 14.2 Main 스토리보드 삭제 Info.plist 파일에서 스토리보드 삭제 메인 VC 설정 SceneDelegate 파일에 가서 설정한다 func scene(_ scene: UIScene, willConnectTo session: UISce nlestory.tistory.com 🧸 터미널을 열고 자신의 프로젝트가 있는 폴더로 이동한다. cd 원하는_경로 cd 명령어..
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