08-iOS-Project-Manager-Client
프로젝트 매니저
STEP 1 프로젝트 할일 리스트
기능구현
UI구현방식 : 코드
아키텍쳐 :
-
ProjectManagerViewController : NavigationViewController위에 StackView(axis: horizontal)를 올리고 각각 StackView내에 TitleLabel과 TableView를 StackView(axis: vertical)로 묶어 올렸습니다.
-
NewTodoFromViewController(Modal View) : NavigationViewController 위에 StackView(axis: horizontal)를 올리고 그 위에 TextField, DatePicker, TextView를 올렸습니다.
-
TodoListCell(Custom Cell) : Cell위에 StackView를 올리고 위에 titleLabel, descriptionLabel, DateLabel을 올렸습니다.
Drag & Drop :
-
Cell내에 존재하는 titleLabel, descriptionLabel, dateLabel에 존재하는 세개의 데이터를 한번에 ItemProvider로써 변환하기 위해 CellData라는 타입을 만들었습니다.
-
같은 테이블 뷰 Cell을 이동시에는 DataSource메서드인 moveRowAt을 활용하여 Drop이 이루어지고, 다른 테이블 뷰로의 이동시에는 같은 기능을 Drop Delegate 메서드인 dropSessionDidUpdate와 performDropWith 메서드가 해줍니다.
새로운 Cell 추가,삭제 및 수정 :
-
Cell추가 : Delegate패턴을 이용하여 NewTodoFormViewController가 ProjectManagerViewController의 권한을 위임받아 데이터를 저장하는 배열에 append를 시키고 TableView를 reload 시키고 titleLabel에 개수를 갱신합니다.
-
Cell삭제 : DataSource의 editingStyle 메서드를 사용하여 구현하였고 삭제시 TableView위에 있는 TitleLabel에 있는 셀의 개수를 Reload를 시켜줍니다.
-
Cell수정 : Delegate패턴을 이용하여 Cell추가 기능과는 반대로 ProjectManagerViewController가 NewTodoFormViewController의 권한을 위임받아 Cell에 있는 데이터를 TextField, DatePicker 그리고 TextView에 전달해줬습니다. Edit버튼으로 EditingMode를 활성화하여 데이터를 수정하고 Done을 눌러 저장할 시 권한위임을 반대로하여 원래 Data 배열의 값을 갱신 시켜줬습니다.
타임라인
06.28~07.03
- 팀그라운드룰 작성
UITableView
의Drag and Drop
기능 공식문서 공부- drag and drop 문서만 3일
07.04~07.11
- UIDatePicker
- VC 데이터전달
- StackView
- TextField
- TextView
- UIBarButtonItem
- UITableView swipe Delete
- drag and drop
07.12~07.16
- deleteRows()
- insertRows()
- editMode
트러블슈팅 (Troubleshooting)
- delegate패턴 사용시 delegate위임 꼭 해주기
- tableView에서 cell사이에 간격을 줄 수 없었다.
- Section에 빈 headerView를 추가하여 변경하였다.
- cell을 추가할 때 data의 Array의 Index값을 indexPath.row로 주었더니 계속 동일한 element가 호출되었다.
- data Array의 index값을 indexPath.section으로 변경하여 해결
- stackView 내에 존재하는 contents들의 layout을 직접 지정해주었더니 경고메세지발생
- contents들의 layout을 잡아줄 때는 위치는 변경하지않고 크기만 조절해줘야한다.
- cell 사이에 간격을 주기 위해 section을 사용하였는데, drag and drop을 구현함에 있어서 row관련 메서드가 많아서 난황을 겪고 있음
- 일단 section보다는 row로 해보는 방향으로!!
참고 링크
참고 링크 세부사항
공식문서
- Supporting Drag and Drop in Table Views
- Adopting Drag and Drop in a Table View
- DateFormatter
- tableView(_:editingStyleForRowAt:)
- Pickers
- UIDatePicker
- Scheduling a Notification Locally from Your App
- Handling Notifications and Notification-Related Actions
- UndoManager
Drag and Drop
- [WWDC] Drag and Drop 2017
- [WWDC] Mastering Drag and Drop
- [블로그] iPadOS ) Drag and Drop (1) - Zedd
- [GitHub] StanfordLectureMemo_11~12.md
- [유투브] Stanford - Developing iOS 11 Apps with Swift - 11. Drag and Drop, Table View, and Collection View
- [raywenderlich] Drag and Drop
- Swift Talk -
- [블로그] Drag and Drop Issue - panther
- [블로그] Creating a NSItemProvider for custom model class (Drag & Drop API) - Osama Naeem
스토리보드 없이 코드로 짜기
- [블로그, iOS - swift] init(frame:), required init?(coder aDecoder: NSCoder), prepareForInterfaceBuilder(), awakeFromNib() 초기화의 정체 - jakekim
- [블로그] [iOS][Swift] - 스토리보드 없이 코드로만 UI 구현하기 - 엘림
VC 데이터 전달
- [블로그] [iOS] View Controller들 사이에서 Data 주고받는 6가지 방법 - sweetdev
- [블로그] iOS UITableView, reloadData 개요 및 참고사항 - MungGu
- iOS ) Delegate를 이용한 ViewController간 Data전달방법
DatePicker
- [블로그] UIKit - Date Picker 사용하기, iOS 14 변경사항 정리 - Kas
- [블로그] UIKit - Calendar 와 Date 기초 익히기 - Kas
- [블로그] [iOS UIKit in Swift 4] UIDatePicker 사용하기 - 콤씨
Navigation bar
UIToolbar
UITextField
UIModalPresentation
StackView
UIBarButton
- [블로그] [iOS UIKit in Swift 4] UIBarButtonItem 사용하기 - 콤씨
- [블로그] iOS Swift View, Button 그림자 넣기 - GonsiOS
TableViewCell Swipe Delete