일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- collectionview
- 리펙터링
- Observable
- 애니메이션
- tableView
- HIG
- map
- clean architecture
- combine
- 리팩토링
- Clean Code
- 클린 코드
- ios
- Protocol
- ribs
- 리펙토링
- Human interface guide
- Xcode
- RxCocoa
- MVVM
- UICollectionView
- rxswift
- swift documentation
- 스위프트
- SWIFT
- swiftUI
- uitableview
- uiscrollview
- Refactoring
- UITextView
- Today
- Total
목록uitableview (23)
김종권의 iOS 앱 개발 알아가기
셀 삭제 기능 활성화 방법 UITableView의 편집모드 중 셀 삭제 - UITableView에서 아무것도 설정 안하고 수정모드에 들어가면 UI는 모두 활성화 버튼에서 tap()이 눌렸을 때 tableView.setEditing(animated:)로 편집모드 설정 @objc private func tap() { let shouldBeEdited = !tableView.isEditing tableView.setEditing(shouldBeEdited, animated: true) editButton.isSelected = shouldBeEdited } 왼쪽에 삭제 UI 버튼이 노출되고, 삭제 버튼을 눌러도 아무런 반응이 없는 상태 셀 삭제 기능 활성화 - delegate 할당 tableView.deleg..
UITableView의 대표적인 2가지 style header, footer가 없으면 둘 차이 x plain 스타일 - 스크롤 시 header가 상단에 고정 (sticky header 처럼 보여지는 효과) grouped 스타일 - 스크롤 시 header가 상단에 고정되지 않고, header가 있으면 자동으로 footer 영역이 생성 grouped 스타일 주의사항 보통 section이 고정되지 않게끔 구현해야하기 때문에 grouped 스타일을 많이 사용 grouped 스타일을 사용하고 header를 주면 개발자 의도에 상관없이 footer 영역이 자동으로 생성되므로 footer를 없애주는 코드가 따로 필요 (코드) import UIKit class ViewController: UIViewController..
구현 아이디어 Cell의 UI가 복잡하거나 여러가지의 타입이 있는 경우 보통 UITableView나 UICollectionView를 사용하지만, 위처럼 단순한 수평 스크롤 뷰는 UIScrollView와 UIStackView로 쉽게 구현 가능 주의할점은 UITableView, UICollectionView는 Cell을 재사용하여 UI성능에 이점이 있으므로, 데이터가 많을때는 UITableView나 UICollectionView를 사용 구현 핵심 부분은 데이터를 선택했을때 해당 데이터의 index를 알아내는 것인데, 이것또한 UIView의 tag를 활용하면 쉽게 구현이 가능 구현 * UI를 코드로 구현할 때 편의를 위해 아래 라이브러리 사용 pod 'SnapKit' pod 'Then' 수평 스크롤 뷰인 My..
* Storyboard를 이용한 구현은 이 포스팅 글 참고 UIScrollView UIScrollView의 특징은 layout의 종류가 두 가지 frameLayoutGuide: 변형되지 않은 레이아웃 (autolayout과 같은 제약조건으로 한번 정하면 고정) contentLayoutGuide: 변형되는 레이아웃 (내부 컨텐츠의 intrinsic content size에 의해서 변형) UIScrollView와 UIStackView 사용 방법 * 예제에 코드로 UI작성을 위해 SnapKit 사용 scrollView, stackView 준비 (수직 스크롤 구현할 경우) stackView의 axis를 vertical로 설정 class ViewController: UIViewController { private..
사용한 프레임워크 RxSwift RxCocoa RxDataSources 구현 아이디어 RxDataSources의 인스턴스가 가지고 있는 canEditRowAtIndexPath라는 프로퍼티를 사용하여 delete 기능 활성화 dataSource.canEditRowAtIndexPath = { _, _ in true } tableView의 rx.itemDeleted를 바인딩하여 처리 self.tableView.rx.itemDeleted .bind { ... } RxDataSource를 사용한 UITableView 구현 예제에 사용할 SectionModel Section의 데이터는 사용하지 않을 것이지만, section이 존재할때 어떻게 사용되는지를 예를 위해 존재 import RxDataSources stru..
1. Section, Item 모델링 - 단일 Section, 다중 Item 모델링 방법 (UITableView, UICollectionView) 2. Section, Item 모델링 - 다중 Section, 다중 Item 모델링 방법 (UITableView, UICollectionView) 예제에 사용한 프레임워크 Then - 초기화하는 동시에 프로퍼티에 접근하여 sugar programming을 위해 사용 SnapKit - UI의 오토레이아웃 구현에 편의를 위해 사용 RxSwift, RxCocoa - 비동기 처리에 편의를 위해 사용 RxDataSources - dataSource는 UITableViewDataSource 델리게이트를 사용하면 되지만 편의를 위해서 RxDataSource 사용 cf) 만..
1. Section, Item 모델링 - 단일 Section, 다중 Item 모델링 방법 (UITableView, UICollectionView) 2. Section, Item 모델링 - 다중 Section, 다중 Item 모델링 방법 (UITableView, UICollectionView) 예제에 사용한 framework Cell안의 UI 인터렉션 처리를 위해 일반적으로 많이 사용하는 비동기 처리 방식 예제를 보이기 위해 아래 프레임워크 사용 RxSwift와 RxCocoa 사용 다중 Item 모델링 아이디어 ViewController에서 UITableView를 가지고 있고 이 tableView의 셀 처리를 쉽게 하고싶은 경우 모델링이 중요 tableView에서 사용할 데이터 소스의 형태는 아래와 같은 ..
예제에 사용한 프레임워크 SnapKit Then RxSwift, RxCocoa Kingfisher Alamofire # UI pod 'SnapKit' pod 'Then' # Util pod 'RxSwift' pod 'RxCocoa' pod 'Kingfisher' # Network pod 'Alamofire' 페이지네이션 아이디어 2가지 1번 방법) 스크롤된 위치를 계산하여, 남은 아래 영역이 프레임의 크기보다 작게 남은 경우, 페이지네이션 실행 2번 방법) delegate 메소드인 tableView(_:prefetchRowAt:) 를 사용하여 prefetch 사용 func tableView(_ tableView: UITableView, prefetchRowsAt indexPaths: [IndexPath]..