일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- type
- IOS
- enum
- Method
- url
- 코딩테스트
- 스위프트
- Foundation
- extension
- Git
- property
- initializer
- initalizer
- tuist
- Unicode
- Swift
- delegate
- 이니셜라이저
- Xcode
- struct
- String
- interpace
- init
- UIKit
- Terminal
- instance
- optional
- Class
- Protocol
- 디자인패턴
- Today
- Total
목록UIKit (10)
아리의 iOS 탐구생활
YAPP 동아리 21기 iOS 2팀 핏프티 프로젝트를 진행하면서 겪었던 문제입니다. Tuist 4 버전부터는 발생하지 않으니 참고해주세요. # 문제 상황 먼저 dependencies에 Amplify 라이브러리 설치를 위해 SPM 목록에 아래와 같이 코드를 추가해주었다. import ProjectDescription import ProjectDescriptionHelpers let dependencies = Dependencies( carthage: [], swiftPackageManager: [ .remote( url: "https://github.com/kakao/kakao-ios-sdk", requirement: .upToNextMajor(from: "2.13.0") ), .remote( url: "..
# 문제 상황 Github API로 스타표시를 변경한 후 (PUT), 사용자의 스타 체크한 레파지토리 목록을 불러올 때 (GET), 업데이트 된 목록이 아니라 기존에 불러왔었던 Response를 불러오는 문제로 레파지토리 목록이 업데이트가 제대로 되지 않는 현상이였다. 정확히는 바로 새 데이터로 업데이트 되지 않고, 몇초 이후에 다시 네트워크 요청을 하여 재시도하면 새 데이터를 불러오는듯한 현상이였다. # 고민 해보기 왜 PUT 이후 GET을 요청했을 때, 업데이트 된 레파지토리 목록을 불러오는데 시간이 걸릴까? API 자체적인 문제인가? 포스트맨으로도 테스트 해보자! 정상이다. 혹시 리스폰스를 캐시처리 하나...? 기존에 요청해서 받았던 리스폰스가 캐싱되어 새롭게 업데이트 된 데이터를 불러오는 것이 아..
앞서 스토리보드의 장단점을 살펴보자. # Storyboard 장점 ViewController 간 연간 관계를 한눈에 볼 수 있다 ViewController의 형태를 시각적으로 표현해줘서 UI가 어떻게 생겼는지 확인할 수 있다. 컨트롤 생성 시 Drag & Drop으로 간단히 생성할 수 있다. # Storyboard 단점 Git Marge 시 Storyboard에서 충돌이 발생함 스토리보드에 여러개의 ViewController가 추가되면 스토리보드 실행이 느려지고 심지어 Xcode가 멈춰버리는 일도 발생한다. 스토리보드로 협업이 불가능한 것은 아니지만, 위와 같은 단점들 때문에 스토리보드 사용을 피하게 된다. 따라서 이러한 문제를 해결하기 위해 2가지 방법을 많이 사용하게 된다. 스토리보드를 사용하지 않고..
테이블뷰나 컬렉션뷰나... didSelectRowAt 메소드가 호출되었을 때 화면전환을 해주고 싶으면 어떻게 해야하는지 알아보는 시간! 아래처럼 스토리보드에서 Segue를 생성해주자 이후 생성한 Segue를 클릭하고, 우측 인스펙터에서... 위와 같이 identifier를 지정해준다. 이후 코드로 돌아가서 Delegate 프로토콜을 채택해주고, didSelectRowAt 메소드를 호출하여 performSegue 메소드를 호출해주면 끝~ // 코드 예시~ extension ItemListViewController: UITableViewDelegate { func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { perfor..
1️⃣ 스토리보드에서 감추기 네비게이션 컨트롤러를 클릭 후 우측 Inspector에서 Shows Navigation Bar 체크를 해제해준다. 2️⃣ 코드로 감추기 네비게이션 컨트롤러로 Embed In 되어있는 ViewController 내부에 다음과 같은 코드를 추가해준다. self.navigationController?.isNavigationBarHidden = true 위와 같은 방법은 Navigation Controller에 연결되어있는 모든 ViewController의 Navigation Bar가 숨겨진다. 특정 ViewController의 Navigation Bar를 숨기려면 다음과 같은 방법이 있다. 해당 방법은 View Life Cycle 메소드를 활용하여 뷰가 화면에 보일 때 Naviga..
iOS 기기는 한정된 메모리를 가지고 애플리케이션을 구동한다. 만약 사용자에게 보여주고 싶은 데이터가 많고 데이터의 양 만큼 많은 뷰가 필요하다면 어떻게 될까? 화면에 표시할 수 있는 뷰의 개수는 한정되어 있지만 표현해야하는 데이터가 많은 경우 반복된 뷰를 생성하기 보다는 뷰를 재사용할 수 있다. 사용할 수 있는 메모리가 작아서 데이터의 양만큼 많은 뷰를 생성하는 것은 메모리를 많이 낭비할 수 밖에 없기 때문이다. 뷰를 재사용하므로써 메모리를 절약하고 성능 또한 향상할 수 있다. ## 재사용의 대표적인 예 UITableViewCell UICollectionViewCell ## 재사용 원리 테이블뷰 및 컬렉션 뷰에서 셀을 표시하기 위해 데이터 소스에 뷰(셀) 인스턴스를 요청한다. dequeueReusabl..
프로젝트 피드백을 받다가 Frame과 Bounds는 어떤 차이가 있느냐는 질문에 궁금해서 찾아보게 되었다. # Frame Apple Developer Documentation developer.apple.com Super View 좌표계에서 View의 위치와 크기를 나타낸다. ## Frame의 origin(x, y) Super view의 원점을 (0,0)으로 놓고 원점으로부터 얼마나 떨어져 있는지를 나타낸다. 따라서 Frame의 origin 값을 변경하면 SubView도 그만큼 같이 움직인다. ## Frame의 Size(width, height) View 영역을 모두 감싸는 사각형으로 나타낸다. View 자체의 크기가 아니라 View가 차지하는 영역을 감싸서 만든 사각형이라고 이해하면 된다. ## 언제 ..
UIView 요소를 코드로 직접 커스텀하여 사용하기 위해 만들던 와중에 override 이니셜라이저와 required 이니셜라이저, 총 2개의 이니셜라이저를 정의해야한다는 것을 알게되었다. override init(frame: CGRect) { super.init(frame: frame) } required init(coder: NSCoder) { super.init(coder: coder) } 근데 이 둘의 정체는 뭘까..?? 왜 재정의하며 파라미터로는 각각 다른 타입을 받고있는데, 어떤 것을 초기화하는 것일까? 한번 알아보자. # init(frame:) Apple Developer Documentation developer.apple.com 코드로 UIView Class의 View 인스턴스를 만들기 ..
Apple Developer Documentation developer.apple.com 새로운 ViewController 클래스를 만들게 되면 아래 prepare 메소드가 주석처리 되어있다. /* // 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..
Apple Developer Documentation developer.apple.com 값을 늘리거나 줄이는 컨트롤. # 화면에 Label과 Stepper 추가하기 라이브러리 창을 켜서 Label과 Stepper를 추가해준다. Label의 텍스트와 폰트 크기를 취향껏 조절해준다. 아래 예제처럼 Auto Layout을 설정해준다. Auto Layout을 설정하지 않는다면 화면크기가 달라질때마다 위치가 바뀔 수 있다. # @IBOutlet과 @IBAction을 설정하고 코드와 연결 Label과 Stepper를 코드에 연결하여 @IBOutlet 추가 마찬가지로 @IBAction 메서드도 추가해주자. Stepper를 동작할 때마다 Label의 텍스트가 변하도록 설정해준다. # 완성 # 주요 프로퍼티 살펴보기 ..