안녕하세요. 개발하는 정주입니다.
오늘은 작심삼일 개발 일지 - 1에 대해 포스팅하려고 합니다.
* 해당 포스팅은 대략적인 개발 일지로 자세한 내용은 필요시에만 따로 포스팅합니다.
목차
목표
오늘은 며칠간 해결하지 못했던 ViewController A와 B 간의 이동을 해결하는 것이 목표였습니다.
작심삼일 프로젝트는 조건에 따라 시작하는 VC가 달라져야 합니다.
또한 A에서 B로 이동한 뒤에는 탭을 눌러도 화면이 B로 유지돼야 합니다.
iOS에서는 처음 시도해보는 동작이라 어떻게 해결해야 하나 고민이 많았습니다.
오늘은 무조건 해결하자라고 결심을 하고 개발을 시작했습니다.
문제 상황
개발을 하며 크게 두 가지 문제가 있었습니다.
1. 조건에 따라 root VC를 A나 B로 변경하면 하단 탭 바가 나오지 않는다.
2. 앱에 진입했을 때 A에서 B로 이동한 후 B에서 탭을 누르면 A로 돌아간다.
즉, 목표로 했던 두 가지 동작 모두 제대로 작동을 안 했습니다.
착잡한 마음에 이유를 분석해보았습니다.
문제 원인
기존 작심삼일 프로젝트는 아래 사진과 같은 구조를 가지고 있었습니다.
A와 B는 A에서 B로 이동했을 때 B에서도 A와 동일한 하단 탭 바를 보여주기 위해 내비게이션 컨트롤러로 묶었는데요.
문제 1과 문제 2 모두 내비게이션 컨트롤러 때문에 발생한 문제였습니다.
내비게이션 컨트롤러를 탭 바 컨트롤러에 연결했기 때문에 root VC를 A나 B로 바꿨을 때 하단 탭 바가 나오지 않는 것이었습니다. 또한 탭을 눌렀을 때 A나 B 단일 VC로 이동되는 게 아닌 내비게이션 컨트롤러로 진입을 하니 당연히 A로 돌아가는 것이었죠.
이런 이유로 내비게이션 컨트롤러를 삭제하고 A, B를 탭 바 컨트롤러에 연결해야 했습니다. 동시에 A와 B 모두 동일한 하단 탭 바를 가지게 해야 했습니다.
해결 방법
결국에는 내비게이션 컨트롤러를 포기하고 새로운 구조를 생각했습니다.
바로 모든 화면을 하나의 탭으로 만드는 것입니다.
화면 개수가 적고 스택 구조가 단순했기 때문에 가능한 방법이었습니다.
세 개의 화면을 모두 탭을 하나씩 만들었습니다. 즉, 세 개의 탭을 만든 것이죠.
문제 1은 조건에 따라 탭 바 컨트롤러의 VC를 설정하니 해결이 되었습니다.
문제 2는 A 탭에서 버튼을 눌렀을 때 B 탭으로 전환이 되도록 구현을 했습니다.
동일한 하단 탭 바를 가져야 한다는 문제는 A 탭과 B 탭의 아이콘, 타이틀을 같게 하는 것으로 해결을 했습니다.
한계
A 탭에서 B 탭으로 전환될 때 화면이 넘어가는 애니메이션이 없다는 한계가 있습니다.
일단은 진행하고 나중에 수정을 해봐야겠습니다.
다음 개발 진도
다음 개발 진도는 작심삼일이 채워졌을 때 Alert Dialog를 띄우는 작업입니다.
다이얼로그의 버튼 A을 누르면 목표 창으로 이동하고 버튼 B를 누르면 day가 누적됩니다.
아직은 초보 개발자입니다.
더 효율적인 코드 훈수 환영합니다!
공감과 댓글 부탁드립니다.