iOS(78)
-
[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 -
[iOS] AppDelegate와 SceneDelegate, App의 Life Cycle(생명주기)
👉 Life Cycle (생명주기) 생명주기란 앱의 최초 실행과 종료 사이에 발생하는 이벤트로 구성된다. 생명주기에는 App 생명주기와 ViewController 생명주기가 있다. 2023.02.24 - [iOS/iOS] - [iOS] ViewController의 생명주기(Life Cycle) 👉 AppDelegate와 SceneDelegate iOS 12 이전 iOS 13 이후 iOS 12 까지는 대부분 하나의 앱에 하나의 window였지만 iOS 13부터는 window의 개념이 scene으로 대체되고 하나의 앱에서 여러개의 scene을 가질 수 있다. 기존에는 한 번에 하나의 화면만 보여주었지만 이제는 동일한 앱을 스플릿뷰로 나눠서 실행할 수 있게 되었다. 이런 경우 사용자가 실제로 사용하는 앱은 하..
2023.02.24 -
[iOS] ViewController의 Life Cycle(생명주기)
👉 ViewController 뷰컨트롤러란 사용자 인터페이스를 관리하고 화면에 내용을 표시하는 데 사용되는 객체이다. 앱의 로직과 데이터를 조정하고 화면에 표시되는 내용을 관리한다. 뷰컨트롤러는 생명주기를 따르며 화면의상태변화에 따라 적절한 메소드를 호출하여 초기화, 데이터로딩, 화면전환, 리소스 해제 등을 관리한다. 뷰컨트롤러는 iOS앱의 핵심 구성요소 중 하나이며, 사용자 인터페이스와 앱의 동작을 관리하는 중요한 역할을 수행한다. ✔️ 역할 수행 화면 관리 : 앱의 각 화면을 담당하며 해당 화면의 뷰 계층 구조를 관리한다. 뷰컨트롤러는 화면의 모양과 동작을 결정하고 사용자 인터페이스 요소들을 관리하며 데이터와 뷰를 연결한다. 상태 관리 : 뷰컨트롤러는 화면 전환과 같은 상태변화에 대응하여 적절한 동작..
2023.02.24 -
[iOS] Frame 과 Bounds
👉 시작 Bounds 와 Frame 모두 뷰의 위치와 크기를 나타내는 UIView의 프로퍼티이다. 두가지의 차이점을 알아보자요. 👉 Frame https://developer.apple.com/documentation/uikit/uiview/1622621-frame 상위 뷰의 좌표 시스템에서 뷰의 위치와 사이즈를 나타낸다. frame이 나타내는 origin(x, y)는 슈퍼뷰의 원점을 (0, 0)으로 보고 원점으로부터 얼마나 떨어져있는 지를 나타낸다. 👉 Bounds https://developer.apple.com/documentation/uikit/uiview/1622580-bounds 자신의 좌표 시스템에서 뷰의 위치와 크기를 나타낸다. 자신의 좌표(default 값)이 (0, 0)이다. 👉 Fra..
2023.02.14 -
[iOS] SafeArea
👉 SafeArea 란? 아이폰X부터 상단의 노치가 등장하면서 SafeArea 가 나오게 되었다. 상단의 노치부분과 하단의 홈바부분을 제외한 영역을 말한다. 컨텐츠가 제대로 안전하게 보일 수 있는 부분이다. 세로 가로 👉 SafeArea 적용 SafeArea에 적용한 View Superview에 적용한 View 화면 전체를 다 채울 때에는 SafeArea를 적용하지 않을 수 있다. 원하는 부분의 제약조건(Constraint)을 Safe Area 에서 Superview 로 변경하면 된다. ✔️ SafeArea 적용 해제 ViewController에서 'Use Safe Area Layout Guides' 체크 해제를 하면 된다. 체크했을 때 체크 해제했을 때 SafeArea을 아예 사용하지 않고 이용이 가능..
2023.02.11 -
[iOS] 스토리보드 (Storyboard) 와 코드베이스 (CodeBase)
iOS 앱의 UI를 만들 때에는 스토리보드를 사용하거나 코드로 짜는 방법 두 가지가 있다. 처음 Xcode를 접하였을 때 기본적으로 Main.storyboard 파일이 생성되어 있어 이 방법을 먼저 사용할 것이다. 스토리보드로 사용하다 이제 문제점이 하나씩 나타날 것이고 그러면 코드UI로 넘어가는 것 같다. 그래서 이번에는 스토리보드의 장단점과 코드UI 와의 차이를 알아보려고 한다. 👉 스토리보드 (Storyboard) 직관적으로 앱의 뷰와 흐름을 알 수 있다. 소스코드를 보지 않아도 UI 확인이 가능하다. 결과물을 예측하기 쉽다. 화면 로딩이 오래걸린다. 재사용성이 떨어진다. IBOutlet, IBAction 등의 연결이 끊어지면 찾기가 어렵다. 여러 명이 작업할 때 conflict가 발생할 경우 해결..
2022.12.01 -
[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 -
[UIKit] 스토리보드 없는 프로젝트 세팅
프로젝트 생성 Main Interface 부분 삭제 version 14.2 Main 스토리보드 삭제 Info.plist 파일에서 스토리보드 삭제 메인 VC 설정 SceneDelegate 파일에 가서 설정한다 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) //뷰컨트롤러 인스턴스 생성 le..
2022.08.14 -
[UIKit] 카카오 (다음) 지도 API 사용하기(2)
자신의 위치를 위도와 경로로 받아서 지도의 가운데로 설정 mapView.setMapCenter(MTMapPoint(geoCoord: MTMapPointGeo(latitude: 37.456518177069526, longitude: 126.70531256589555)), zoomLevel: 1, animated: true)
2022.08.14 -
[UIKit] 카카오 (다음) 지도 API 사용하기
SDK 다운로드 https://apis.map.kakao.com/ios/guide/#step1 내 애플리케이션 추가하기 https://developers.kakao.com/console/app 카카오계정 로그인 여기를 눌러 링크를 확인하세요. accounts.kakao.com iOS추가하고 BundleID 입력 나의 번들아이디는 처음 프로젝트를 생성할 때 정하고 General 가면 확인할 수 있다. 이거랑 카카오 애플리케이션에서 번들아이디를 같게 적어줘야한다 카카오 네이티브앱키 입력 위에서 다운받은 SDK파일을 압축을 풀고 lib 폴더로 들어가서 DaumMap.embeddedframework 파일을 내 xcode프로젝트에 복사한다 다음지도프레임워크가 사용하는 프레임워크들을 추가해줘야한다 - OpenGLE..
2022.08.14