일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- MVVM
- swiftUI
- UITextView
- combine
- uitableview
- uiscrollview
- Observable
- rxswift
- Clean Code
- swift documentation
- 클린 코드
- Xcode
- Human interface guide
- UICollectionView
- 리펙토링
- RxCocoa
- Protocol
- 애니메이션
- Refactoring
- ribs
- map
- clean architecture
- 리펙터링
- 스위프트
- tableView
- HIG
- 리팩토링
- ios
- SWIFT
- collectionview
- Today
- Total
목록uitableview (23)
김종권의 iOS 앱 개발 알아가기
scrollViewDidEndDragging(_:willDecelerate:) 개념 scrollView의 델리게이트 메소드 스크롤하는 드래그가 종료되었을때 호출 스크롤이 종료되었을때 호출 decelerate값이 true이면 사용자가 스크롤을 놓을때 관성으로 놓아진것 (드래그를 떼고나서 서서히 멈추는 스크롤 됨) decelerate값이 false이면 사용자가 스크롤을 놓을때 관성없이 놓은것 (드래그를 떼고나서 바로 멈춤) extension ViewController: UITableViewDelegate { func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) { print("decelerate>"..
일반적인 DataSource 관리 Section이 여러개이고 Item도 여러개인 경우, 보통 dataSource를 2차원 배열로 하거나, Section과 Item을 갖는 struct를 만들어서 관리 class ViewController: UIViewController { struct Section { var title: String var items: [String] } var sections: [Section] = [ Section(title: "header is a", items: ["A1", "A2"]), Section(title: "header is b", items: ["B1", "B2"]), ] let tableView: UITableView = {...} } extension ViewCont..
setContentOffset 개념 UIScrollView의 메서드이며, CGPoint 좌표를 통해 원하는 곳으로 스크롤 하게끔하는 기능 애플에서는 이 메서드에 completion handler를 따로 작성하지 않아 직접 구현이 필요 completion 구현하는 방법에는 UIView.animate와 CATransaction 등등의 방법이 널리 알려져 있지만 이 방법으로는 completion 동작 x setContentOffset에 completion 구현 방법 "contentOffsetAnimationDuration"를 사용하여 UIScrollView의 인스턴스에 setValue로 입력하면 스크롤 속도를 지정할 수 있는 아이디어를 사용 scrollView.setValue(0.5, forKeyPath: "..
contentInsetAdjustmentBehavior 속성 safeArea를 고려하여 자동으로 레이아웃을 지정해주도록 하는 옵션 구체적으로는 scrollView의 content 영역의 inset을 safe area 고려하여 레이아웃될지 결정해주는 옵션 ContentInsetAdjustmentBehavior의 4가지 옵션 automatic(default): 자동으로 safe area에 맞게 레이아웃 조정 scrollableAxes: 스크롤 가능한 방향만 safe area 고려 never: safe area 상관 없이 적용 always: content는 무조건 safe area 고려 @available(iOS 11.0, *) public enum ContentInsetAdjustmentBehavior : ..
UITableView의 backgroundView 프로퍼티 보통 리스트 형태나 그리드 형태로 데이터를 보여줄 때, 데이터를 불러오기 전에 스켈레톤 뷰 같은것을 보여주어야 하는데 이 때 UITalbeView나 UICollectionView 내부에 있는 backgroundView 프로퍼티를 사용하면 매우 쉽게 적용이 가능 (별도의 뷰 필요 없이 tableView.backgroundView 사용) 이 backgroundView는 tableView의 cell 앞쪽에 위치 ex) tableView에 사용할 cell 정의 final class MyTableViewCell: UITableViewCell { static let id = "MyTableViewCell" private let label = { let la..
UITableView의 separatorInset cell 안의 내용에 left, right inset을 줄 수 있는 property separatorInset은 UIEdgeInsets 타입이라서 top, bottom도 값을 입력할 수 있지만, top, bottom은 적용되지 않음 separatorInset을 설정하면 해당 padding을 탭했을때도 이벤트를 받아 셀이 선택되므로 padding을 탭해도 선택되게끔 할 때 유용하게 사용이 가능 사용방법 tableView에서 separatorInset 값을 대입 private let tableView: UITableView = { let view = UITableView() view.backgroundColor = .clear view.separatorSty..
dataSource 관리 방법 dataSource를 관리하다보면 보통 UI에서 사용되는 데이터와 비즈니스로직이 들어갈 ViewModel에서 사용되는 dataSource 두 벌을 관리하는 경우가 있는데, 상태 관리를 한곳에서 사용하지 않으면 데이터 정합성 문제가 발생 protocol을 사용하여 dataSource를 관리하면 해결 viewController에서 dataSource에 접근할 때는 protocol에 의존하게끔하면 해결 MVVM 구조 먼저 준비 MVVM구조를 쉽게 구현하기 위해 예제에 사용할 라이브러리 pod 'RxSwift' pod 'RxCocoa' View ViewModel 구현체에 의존하지 않도록, ViewModelable 프로토콜을 생성하고 이것에 의존하도록 구현 UI에 관한 input을 ..
UITableView 편집 모드 UITableView의 편집모드 중 Delete와 move관련 개념은 이전 포스팅 글 참고 [iOS - swift] UITableView의 편집모드 사용 방법 (셀 삭제, 셀 이동, canEditRowAt, editingStyleForRowAt, commit, can 셀 삭제 기능 활성화 방법 UITableView의 편집모드 중 셀 삭제 - UITableView에서 아무것도 설정 안하고 수정모드에 들어가면 UI는 모두 활성화 버튼에서 tap()이 눌렸을 때 tableView.setEditing(animated:)로 편 ios-development.tistory.com 예제에 사용될 starter project 링크 UITableView의 편집모드 버그 편집모드 진입 > -..