apple/UIKit, ReactiveX 39

UICollectionView Sticky Header

UICollectionView Sticky Header  UITableView처럼 헤더를 붙게 해달라는 요청이 들어왔는데, 해당 키워드로 검색했을 때UICollectionViewFlowLayout을 커스텀 해서 만드는 글들이 많아서 작성 if let layout = self.collectionViewLayout as? UICollectionViewFlowLayout { layout.sectionHeadersPinToVisibleBounds = true // 헤더를 고정}  UITableView처럼 헤더를 붙게 사용할 수 있음.

UITableView isSelected, isHighlighted 정리

UITableView isSelected, isHighlighted 정리 UITableView에서도 UICollectionView와 동일하게 isSelected가 존재하지만 UICollectionView와 다르게 초기에 셀이 그려질 때 처음에 세팅되고 이후에는 호출되지 않음.UICollectionView와 동작성이 다름.UICollectionView 정리 내용: https://rldd.tistory.com/627 영상을 보면 보이듯이 처음에 isSelected가 호출된 후 그 이후로는 선택해도 해당 변수의 get-set 부분이 호출되지 않음. 예제코드import UIKitimport SnapKitfinal class SmapleTableViewController: UIViewController { ..

UICollectionView isSelected 정리

UICollectionView isSelected 정리 UICollectionView에서 overrdie isSelected를 통해 상태를 변경할 수 있음사용자가 선택할 때마다 isSelected가 변경됨.주의할 점: isSelected를 override해서 사용하는 경우 버전에 따라 선택 상태가 제대로 UI에 반영되지 않을 수 있음.TableView에서는 동작성이 다름.UITableView 사용성 링크: https://rldd.tistory.com/628호출순서override isSelected (이전에 선택된 아이템)DeSelect (이전에 선택된 아이템)override isSelected (현재 선택된 아이템)didSelect (현재 선택된 아이템)예제코드import UIKitimport Swift..

[UIKit] reloadSections에서 애니메이션 없애는 방법

reloadSections에서 애니메이션 없애는 방법 UITableView 혹은 UICollectionView를 사용할 때 reloadData()가 아니라 특정 섹션만 업데이트하는 reloadSections()를 사용할 수 있음. 특정 섹션만 업데이트 하는 것은 이점도 존재하나, 애니메이션이 들어가게 되어서 원하는 UX 결과물이 아니거나, 방송 실시간 채팅처럼 매우 빠른 속도로 데이터가 들어와 UI를 업데이트가 진행되는 경우 UI가 블락되거나, 심지어는 크래시가 발생하기도 함. Task { @MainActor [weak self] in guard let self else { return } UIView.performWithoutAnimation { self.reloadSections(in..

ReactorKit + RxDataSources #2(RxTableViewSectionedAnimatedDataSource)

ReactorKit + RxDataSources #2 (RxTableViewSectionedAnimatedDataSource) 개발환경 ReactorKit 3.2.0 RxDataSources 5.0.2 SnapKit 5.6.0 Xcode 14.0 1편을 기반으로 하고 있습니다. https://rldd.tistory.com/501 ReactorKit + RxDataSources #1(SectionModelType) ReactorKit + RxDataSources #1(SectionModelType) 개발환경 ReactorKit 3.2.0 RxDataSources 5.0.2 SnapKit 5.6.0 Xcode 14.0 RxDataSource는 이전에도 많이 사용해봄. DiffableDataSource를 이해..

ReactorKit + RxDataSources #1(SectionModelType)

ReactorKit + RxDataSources #1(SectionModelType) 개발환경 ReactorKit 3.2.0 RxDataSources 5.0.2 SnapKit 5.6.0 Xcode 14.0 RxDataSource는 이전에도 많이 사용해봄. DiffableDataSource를 이해하고 있다면 사용하기 더 편함. 이 포스팅은 RxDataSources 사용하는 방법의 순서도(?)를 최대한 기록해 두려고 함. 특징: 1. 섹션마다 다른 셀을 적용 2. tableView를 활용하여 동적 높이를 구현함. 3. ReactorKit + RxDataSource 4. cellReactor에 initialState의 값을 Model로 초기화 🌿 결과물 UI 🌿 ✅ 전체 코드 ✅ Step 1. 모델을 정의하기..

[ReactorKit] ReactorKit 공부하기 #7 View (programming)

ReactorKit 공부하기 #7 View (programming) ReactorKit의 많은 예제들이 스토리보드 기반으로 작성되어 있기에 코드 기반의 예제를 작성해 봄. 요약 1. 자주하는 실수 - ReactorKit 사용할 때 : 리액터 reference를 아무데도 안잡아줘서 deinit 되어서 결국 작동하지 않는 실수 2. 자주하는 실수 - bind 내부적으로 호출되는데 명시적으로 또 호출하는거 : init으로 할 수 있음. 우선 ReactorKit에 선언된 프로토콜 View를 열어보자. extension 부분을 보면 알겠지만, bind가 호출되고 있음. bind를 ViewDidLoad()에서 명시적으로 호출하지 않아도 된다. ✅ ViewController ✅ import UIKit import R..

[ReactorKit] ReactorKit 공부하기 #6 transform

ReactorKit 공부하기 #6 transform ✅ 결과물 UI ✅ (ReactorKit 공식문서) https://github.com/ReactorKit/ReactorKit GitHub - ReactorKit/ReactorKit: A library for reactive and unidirectional Swift applications A library for reactive and unidirectional Swift applications - GitHub - ReactorKit/ReactorKit: A library for reactive and unidirectional Swift applications github.com Global States Unlike Redux, ReactorKit ..

[ReactorKit] ReactorKit 공부하기 #5 RxTodo 따라잡기 (3)

ReactorKit 공부하기 #5 RxTodo 따라잡기 (3) ✅ 목표: Service 도입을 위해 RxTodo 코드 분석하기 ✅ 내 프로젝트에서 서비스 도입한 결과 코드 🚨 Realm에서 tableView.rx.itemMoved시, 레코드 순서 어떻게 바꿔야할지 모르겠음. Realm에 대한 이해가 부족해서 앱이 crash 나는 경우가 많은데, 이를 학습해서 보완해야함. Realm에 Token을 사용해서 변경된 데이터의 싱크를 다른 View에서 맞출 수 있음. 코드를 분석하면서 Realm을 완벽하게 적용하여 만들지는 못했지만, BaseViewController랑 Service가 왜 필요한지 확실하게 느낀 시간이었음. 다음 스텝으로 Realm을 더 학습해서 완벽하게 적용해보자. ✅ RxTodo Servic..

[ReactorKit] ReactorKit 공부하기 #4 RxTodo 따라잡기 (2)

ReactorKit 공부하기 #4 RxTodo 따라잡기 (2) 이번에는 지난 시간 create를 했다면, delete를 진행해 볼 예정. 해당 파일 🌿 구현 코드 🌿 어려웠던 점: Action의 경우에는 정의하기가 그리 어렵지 않았으나, Mutation을 어떻게 줘야할 지 생각을 많이했었음. // // TaskListViewController.swift // AppleCollectionView // // Created by Hamlit Jason on 2022/09/07. // import UIKit import ReactorKit final class TaskListViewController: UIViewController, View { var disposeBag = DisposeBag() let re..