[iOS/부스트 코스] iOS 앱 프로그래밍: Sign Up(3-2) - 기능 구현하기(2)
안녕하세요. 개발하는 정주입니다.
오늘은 네이버 부스트 코스 프로젝트 B-Sign Up의 화면 구성하기를 포스팅하려고 합니다.
기능 구현은 로그인 화면, 회원 가입(기본 정보) 화면을 1편, 회원 가입(부가 정보) 화면을 2편으로 나눴습니다.
목차
회원 가입(부가 정보)
회원 가입(부가 정보) 화면에서는 Date Picker 기능과 싱글톤 공유 객체의 적용이 핵심이었던 것 같습니다.
Date Picker부터 보겠습니다.
Date Picker
공식 문서부터 보도록 하겠습니다.
https://developer.apple.com/documentation/uikit/uidatepicker/
UIDatePicker는 iOS 2 버전부터 나온 근본 있는 클래스입니다. 공식 문서에서는 UIDatePicker를 "A control for the inputting of date and time values."로 소개하고 있습니다. 즉, 생년월일을 선택해야 하는 이번 프로젝트에 쓸만한 적절한 클래스입니다.
DatePicker는 4개의 Mode를 지원합니다. Time, Date, Date and Time, Count Down Timer입니다. 이번 프로젝트에서는 생년월일을 선택해야 하므로 Date로 선택했습니다. 저는 가장 기본적인 설정을 하였으며 UI에 관한 여러 설정은 공식 문서를 참고해 주세요.
DatePicker에서 값을 얻어오려면 valueChanged 이벤트를 등록하면 됩니다. 이번 프로젝트에서는 스토리보드에서 이벤트를 등록하였습니다.
DateFormatter를 이용해 DatePicker에서 값을 얻어옵니다. DateFormatter는 원하는 날짜 형식을 정할 수 있는 클래스입니다. DateFormatter에 대한 자세한 내용은 추후 따로 다루겠습니다. 너무 궁금하신 분들은 공식 문서(https://developer.apple.com/documentation/foundation/dateformatter)를 먼저 살펴보세요.
let dateFormatter: DateFormatter = { //DateFormatter 선언을 좀 더 간추릴 수 있는 방법은 없는지 궁금합니다.
let formatter: DateFormatter = DateFormatter()
formatter.dateStyle = .long
return formatter
}()
let date = dateFormatter.string(from: sender.date)
이렇게 얻은 날짜 값으로 birth Label에 변경하고 싱글톤 공유 객체에 설정해줍니다.
가입 버튼
가입 버튼을 누르면 로그인 화면으로 돌아가며 로그인 화면에서는 Id가 자동으로 입력되어야 합니다.
회원 가입(부가 정보) 화면에서는 "로그인 화면으로 돌아간다" 기능만 구현하면 됩니다. 이 기능의 설명을 바꿔 말하면 RootView로 돌아간다고 할 수 있습니다.
view.window?.rootViewController?.dismiss(animated: true, completion: nil)
rootView를 제외한 View를 모두 dismiss 하는 것은 위 코드를 사용하면 됩니다.
위 코드를 이해하기 위해서는 dismiss()의 동작 원리에 대해 알아야 합니다. 자세한 동작은 다음 포스팅에서 다루겠습니다.
dismiss()의 핵심은 presentedViewController가 존재하면 해당 View를 화면에서 해제하고(dismiss) presentedViewController가 존재하지 않으면 presentingViewController에게 dismiss가 전달되어 dismiss()를 호출한 ViewController가 사라집니다.
따라서 rootViewController에서 dismiss를 하면 rootViewController를 제외한 모든 ViewController가 dismiss가 되는 것입니다.
마무리 잡담
오늘은 두 번째 프로젝트의 기능 구현 부분을 마무리하였습니다.
코드 리뷰가 진행 중이고 완료가 되면 Sign Up의 마지막 포스팅으로 작성하겠습니다.
감사합니다!
아직은 초보 개발자입니다.
더 효율적인 코드 훈수 환영합니다!
공감과 댓글 부탁드립니다.