일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- xcode
- roundingMode
- SWIFT
- delegation
- Mock
- SWIFTUI
- Navigation
- UIResponder
- @available
- NumberFormatter
- Info.plist
- NotificationCenter
- 스위프트
- View Life Cycle
- 책후기
- Failed to register bundle identifier
- human interface guidelines
- 독후감
- Codegen
- 아이폰
- 독서후기
- IOS
- 야곰아카데미
- viewcontroller
- mvvm
- contentInset
- 스타트업주니어로살아남기
- 부트캠프
- Structures and Classes
- Modality
- Today
- Total
목록Software Engineering (137)
호댕의 iOS 개발

연락처 앱이나 리스트가 존재하는 다양한 앱을 사용하다 보면 검색을 통해 해당 검색 요건을 충족하는 것들만 보여주는 기능을 자주 접하게 된다. 바로 아래 그림처럼 말이다. 이런 것들은 어떻게 구현하는 것일까??? 이미 애플은 이런 검색 기능을 구현할 수 있도록 Class를 만들어놓았다. 그 이름은 바로 UISearchController !! 이름이 상당히 직관적이다. 그렇다면 UISearchController는 어떻게 사용할 수 있을까? 1️⃣ UISeachController 초기화하기 일단 DateFormatter 같은 것들을 사용할 때처럼 Initialize를 해줘야 한다. private let searchController = UISearchController() 초기화를 해줄 때 Initialize..

View Drawing Cycle 필요에 의해 발생하며, 뷰가 처음 그려지거나 레이아웃이 변하게 되면 그리게 된다. 참고로 CumtomView의 경우 다른 뷰 위에 뷰를 얹는 것을 의미하는 것이 아니다. 실질적으로 draw(rect:) 메서드를 override하여 graphic context 위에 그리는 것을 의미한다. 그러면 언제 View의 컨텐츠 변경을 위해 업데이트 트리거가 동작하는 것일까? 1. View를 부분적으로 가린 다른 View의 이동 및 제거 2. Hidden으로 되어있던 View의 노출 3. 화면을 스크롤할 때 4. 명시적으로 setNeedsDisplay 같은 메서드를 호출할 때 그렇다면 View와 Layout을 업데이트해주는 메서드에 대해 좀 더 자세하게 알아보자. setNeedsDi..
DateFormatter의 비용이 크다는 피드백을 받게 됐다. 사실 DateFormatter를 사용하면서 크게 고려하지 않던 부분이었는데 이번 계기로 찾아보게 됐다. 그래서 다음과 같은 참고 자료들을 찾을 수 있었다. https://sarunw.com/posts/how-expensive-is-dateformatter/ How expensive is DateFormatter | Sarunw If you are working on iOS for long enough, there is a chance that you might have known that DateFormatter is expensive, but what is costly about DateFormatter? Let's find out in t..

프로젝트를 진행하다보면 종종 키보드를 활성화했을 때 키보드 때문에 뒤에 있는 컨텐츠의 일부가 아예 보이지 않는 문제가 발생하곤 한다. 화면 위에 키보드가 활성화되어 아무리 뒤에 있는 View를 스크롤 하더라도 보이지 않는다... 😱 이는 사용자가 자신이 작성한 내용을 확인할 수 없기 때문에 사용자 경험을 매우 안 좋게 하는 요인이라고 생각한다. 그렇다면 이럴 땐 어떻게 해야할까? 일단 이 때는 키보드의 높이만큼 컨텐츠가 위로 올라가야 하지 않을까? 라고 생각하고 방법을 찾아보았다. 그 전에 키보드가 활성화되었고, 키보드가 비활성화되는지 알 수 있는 방법이 필요했다. 이는 이미 만들어져 있는 Notification Center를 사용하면 해결됐다. 내가 사용한 것은 UIResponder에 있는 타입 프로퍼..

어제에 이어 미처 포스팅하지 못했던 TWL을 업로드한다. 이 주는 주로 프로젝트를 진행하며 새롭게 알게 된 내용들이 많았다. 그럼 어떤 내용들이 있었는지 살펴보자. UIRefreshController Apple Developer Documentation developer.apple.com 대부분의 앱들을 보면 화면 가장 상단에서 화면 아래로 드래그를 했다가 손을 떼면 다시 데이터가 리로드되면서 리로드가 되는 표시가 나온다. @objc private func handleRefrashControl() { reloadData() let scrollView = view as? UIScrollView DispatchQueue.main.async { scrollView?.refreshControl?.endRefre..

TWL을 블로그에 포스팅 하는 것이 늦어져서 지금에서야 미리 작성해놓았던 TWL을 포스팅한다... 늦지 않게 꼬박꼬박 포스팅해야겠다. 항상 꾸준하게!!! 그럼 이때는 뭘 배웠는지 정리해보자!! 슬기로운 Reuse Identifier 사용 방법 TableView나 CollectionView에서 Cell을 Register할 때나 dequeueReusableCell을 할 때 항상 reusable Identifier를 사용하게 된다. 이는 물론 String으로 작성해줄 수 있지만 이렇게 할 경우 기억하기도 쉽지 않고 하드코딩을 하게 된다. 따라서 이를 방지하기 위해 이렇게 작성해줄 수 있다. protocol ReusableView: NSObject { static var reuseIdentifier: Strin..

TextField는 기본적으로 만들게 되면 테두리가 존재한다. 이런 식으로 말이다. (참고로 상품 설명의 경우 TextView를 통해 구현했다) 하지만 만약 해당 텍스트 필드에 작성한 내용이 특정 조건을 충족하지 못할 경우 빨간 선으로 테두리를 그리고 싶으면 어떻게 해야할까? 코드는 아주 간단하지만 헤멨던 것이 있어 작성해본다. 일단 코드 먼저 살펴보면 다음과 같다. textField.layer.borderColor = UIColor.systemRed.cgColor textField.layer.cornerRadius = 5 textField.layer.borderWidth = 0.5 코드는 아주 간단하다. 하지만 여기서 textField.layer.borderWidth = 0.5 이 코드가 없다면? 당연..

야곰 아카데미 불타는 토요 스터디에서 진행한 Keychain 관련 공부입니다. 🔐 Keychain은 뭘까? 참고문서: https://developer.apple.com/documentation/security/keychain_services 일단 Keychain은 사용자 대신 작은 단위의 데이터를 안전하게 저장하는 공간을 의미한다. 여기서 작은 단위의 데이터는 인증서, 비밀번호, 인적사항 등의 데이터를 말한다. 이때 keychain service API는 키체인이라는 암호화된 데이터베이스에 사용자의 데이터를 저장하는 매커니즘을 가지고 있다. 단 iOS에서는 하나의 디바이스에 하나의 keychain만 존재하며 번들 단위(앱 단위)로 keychain을 관리하게 되며, MacOS에선 임의로 키체인을 생성할 수..