IOS 분석 - ToDoList
이제 초입단계이기 때문에 직접 코드로 화면을 구현하는게 아니라
Story Board를 작성했다
설명 -> 왜 만들었는지(페르소나 설정)
그리고 필요한 요소들!!
페르소나
Todo리스트를 많이 쓰는 입장에서 실제로 만들어보고 싶었다
필요 요소
간단하게 만들거기때문에 세 가지 기능만 넣었다
+ 버튼 누르면 모달창 나와서 거기에 적으면 테이블에 적히는거
했는지 안했는지 확인할 수 있는 체크표시
삭제 및 편집 가능한 기능 넣기
순서도
-
내가 적은 리스트들을 보여줄 수 있는 하나의 테이블을 만든다.
-
구조체로 List 하나의 틀을 만든다 ( 타이틀과 체크표시 들어있는)
(tasks라는 배열을 만들어서 적은 list를 전부 넣어놓는다) -
+버튼 누르면 모달창이 나오고 textField에 List를 작성한다.
(취소버튼도 왼쪽에 놔두고 취소 누르면 모달창 자연스럽게 사라지게) -
모달 창 안에 '등록' 버튼 누르면 테이블에 보여지게 하기!
-
어플을 종료해서 localDB안에 저장되어서 나중에도 볼 수 있게 하기
-
Edit버튼 누르면 편집 가능 그리고 List옆으로 밀면 삭제 가능하게!!
-
추가적으로 테이블내에서 List 자유롭게 위아래로 이동 가능하게 !!
설명 -> 스토리보드
스토리보드는 최소한으로 쓰자!
네비게이션만 사용해서 edit을 할때 편집화면으로 가게끔 해준다!
cell을 코드에서 생성할거니까 스토리보드에서 Cell의 identifier만 설정! + style은 Basic으로!
테이블은 스토리보드에서 생성!!
설명 -> 코드
가장 기본이자 중요한 거는 일단 적을 수 있어야한다!!!!
-
Task라는 구조체를 만들어서 Cell안에 들어갈 정보를 묶는다.
-
전체 Task를 가지고 있는 Tasks라는 배열을 따로 놔둔다
var tasks = [Task]() {
didSet {
self.saveTasks() // 이 부분은 task를 UserDefaults안에 저장!
}
}
- tapAddButton()를 Action으로 연결해서 + 눌리면 모달 창 나오게!!
중요한거 몇개만 적어놓으려고 한다
let alert = UIAlertController(title:~~~)
let registerButton 안에 handler부분
{
[weak self] _ in
guard let title = alert.textField?[0].text else {return }
let task = Task(title: title, done:false)
self?.tasks.append(task)
self?.tableView.reloadData()
}
self.present(alert, animated: true, completion: nil)
일단 강한 참조를 피하기 위해 weak self를 핸들러 안에 정의했다 이건 아래서 자세히 설명
alert.addTextField해서 적어놓은 내용을 핸들러 안에 있는 title에 저장했다!!
그 다음 Task구조체를 만들어서 tasks라는 배열에 넣고 바로 tableView를 리로딩했다
당연한거지만 추가를 했으면 다시 리로딩 해야하는거!!
새롭게 알게 된 부분들
didSet {} ,
핸들러 안에 [weak self],
tableView.reloadData(),
Map과 CompactMap,
UserDefaults.standard (object와 set),
as? [[String: Any ]] 이렇게 적는이유
reloadRows()와 reloadData()차이
DataSource와 Delegate 이거는 매일 보자 -> 뭐가 들어있고 적재적소에 쓰는법 계속 기르기!
guard에서 else {이 부분에 return 과 return nil 둘 중 무엇을 선택해야할지}
리팩토링할 부분
Author And Source
이 문제에 관하여(IOS 분석 - ToDoList), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@rudgus/IOS-분석-ToDoList저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)