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을 올렸습니다.

Jul-13-2021 22-57-48


Drag & Drop :

  • Cell내에 존재하는 titleLabel, descriptionLabel, dateLabel에 존재하는 세개의 데이터를 한번에 ItemProvider로써 변환하기 위해 CellData라는 타입을 만들었습니다.

  • 같은 테이블 뷰 Cell을 이동시에는 DataSource메서드인 moveRowAt을 활용하여 Drop이 이루어지고, 다른 테이블 뷰로의 이동시에는 같은 기능을 Drop Delegate 메서드인 dropSessionDidUpdate와 performDropWith 메서드가 해줍니다.

같은 테이블 drag and drop

drag and drop to 다른 테이블뷰


새로운 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 배열의 값을 갱신 시켜줬습니다.

NewMemo추가

delete

edit-done

타임라인

06.28~07.03

07.04~07.11

  • UIDatePicker
  • VC 데이터전달
  • StackView
  • TextField
  • TextView
  • UIBarButtonItem
  • UITableView swipe Delete
  • drag and drop

07.12~07.16

  • deleteRows()
  • insertRows()
  • editMode

트러블슈팅 (Troubleshooting)

  1. delegate패턴 사용시 delegate위임 꼭 해주기
  2. tableView에서 cell사이에 간격을 줄 수 없었다.
    • Section에 빈 headerView를 추가하여 변경하였다.
  3. cell을 추가할 때 data의 Array의 Index값을 indexPath.row로 주었더니 계속 동일한 element가 호출되었다.
    • data Array의 index값을 indexPath.section으로 변경하여 해결
  4. stackView 내에 존재하는 contents들의 layout을 직접 지정해주었더니 경고메세지발생
    • contents들의 layout을 잡아줄 때는 위치는 변경하지않고 크기만 조절해줘야한다.
  5. cell 사이에 간격을 주기 위해 section을 사용하였는데, drag and drop을 구현함에 있어서 row관련 메서드가 많아서 난황을 겪고 있음
    • 일단 section보다는 row로 해보는 방향으로!!

참고 링크

참고 링크 세부사항

공식문서

Drag and Drop

스토리보드 없이 코드로 짜기

VC 데이터 전달

DatePicker

Navigation bar

UIToolbar

UITextField

UIModalPresentation

StackView

UIBarButton

TableViewCell Swipe Delete

GitHub

View Github