구현목표 : LED전광판 화면을 표시하고 전광판에 표시할 텍스트, 텍스트 컬러, 배경색상을 설정화면에서 설정한다.
iOS개발 지식 알아보고 구현하기
UINavigationController, 화면전환개념, ViewController Life CyCle, 화면간 데이터전달하기, 에셋 카탈로그
UI Navigation Controller
Content View Controller
스토리보드 생성시 기본으로 생성되는 View Controller로 화면을 규성하는 뷰를 직접 구현하고 관련된 이벤트를 처리
Container View Controller
하나 이상의 Child View Controller을 가지고 있다.
하나 이상의 Child View Controller 를 관리하고 레이아웃과 화면 전환을 담당한다.
화면 구성과 이벤트 관리는 Child View Controller에서 한다.
Container View Controller 는 대표적으로 Navigation Controller 와 TabBar Controller가 있다.
Navigation Controller
계층구조로 된 Content를 순차적으로 보여준다.
Navigation Controller
Navigation Stack
Back버튼이나 Left edge 스와이프를 사용하면 이전화면으로 돌아가며 스택에서 B화면을 Pop(제거)한다.
Navigation Stack
Navigation Bar
RootViewController외에 모든 ViewController에서 사용자가 계층구조에서 뒤로 갈 수 있도록한다.
화면전환개념
화면전환방법
View Controller의 View 위에 다른 View를 가져와 바꿔치기(메모리 누수위험의 이유로 사용을 지양한다)
View Controller에서 다른 View Controller를 호출하여 전환하기
Navigation Controller를 사용하여 화면 전환하기
화면전환용 객체, 세그웨이(Segueway)를 사용하여 화면 전환하기
View Controller에서 다른 View Controller를 호출하여 전환하기(aka. Presentation방식)
기존View Controller위에 새로운View Controller의 화면을 넣는 방식으로 현재 View Controller에 이동할 대상의 View Controller를 직접 호출해서 화면에 표시하는 방법
Presentation방식에서 사용하는 메소드
present 메소드 : 기존화면에 새로운 ViewController를 보여주게 하는 메소드
첫번째 파라미터: 이동할 화면의 ViewController 인스턴스를 할당한다.
두번째 파라미터: 화면을 전환할 때 애니메이션 효과의 유무를 Bool값으로 할당한다.
세번째 파라미터: 화면전환이 완료된 후에 호출되는 Completion이라는 클로저를 정의, 화면전환이 완료된 후에 처리해야 할 로직이 있다면 클로저 안에 작성하면 된다.
dismiss 메소드 : present되었던 화면에서 이전화면으로 돌아가게하는 메소드
첫번째 파라미터: 화면을 전환할 때 애니메이션 효과의 유무를 Bool값으로 할당
두번째 파라미터: 화면전환이 완료된 후에 호출되는 Completion이라는 클로저를 정의, 화면전환이 완료된 후에 처리해야할 로직이 있다면 클로저 안에 작성하면 된다.
Navigation Controller를 사용하여 화면 전환하기(aka. Push방식)
Navigation Controller는 계층적인 성격을 띄는 컨텐츠구조를 관리하기 위한 Controller
View컨트롤러의 전환을 직접 컨트롤
앱의 Navigation 정보를 표시하는 역할
스택으로 자식 뷰컨트롤러를 관리
pushViewController 메소드
첫번째 파라미터: 이동할 화면의 ViewController 인스턴스를 할당한다.
두번째 파라미터: 화면을 전환할 때 애니메이션 효과의 유무를 Bool값으로 할당한다.
popViewController
첫번째 파라미터: 화면을 전환할 때 애니메이션 효과의 유무를 Bool값으로 할당
화면 전환용 객체, 세그웨이(Segueway)를 사용하여 화면 전환하기
Segueway
세그웨이는 두개의 뷰컨트롤러 사이에 연결된 화면전환 객체를 의미
스토리보드를 이용해 출발지와 목적지를 직접 지정하는 방식
따로 코드를 사용하지 않고 스토리보드만을 이용해 화면을 전환 할 수 있다
세그웨이 종류
Manual Segueway : 출발점이 뷰컨트롤러 그 자체인 경우
적절한 시점에 performSegue 메소드를 호출하면서 세그웨이가 실행되어 화면전환이 일어남
Action Segueway : 출발점이 버튼이나 셀 등인 경우
버튼터치와 같은 트리거 이벤트가 세그웨이실행으로 바로 연결되어서 소스코드를 추가하지 않고도 화면전환을 구현 할 수 있음
Action Segueway의 종류
Show: 가장 일반적인 세그웨이, 네비게이션 컨트롤러를 사용하면 화면전환시 뷰컨트롤러가 네이게이션 스택에 쌓이게 된다
Show Detail: SplitView에서 사용되는 세그웨이로 아이폰에서 사용하면 Show와 똑같이 동작하지만 아이패드에서 사용하게 되면 Master-Slave구조로 보이게 된다.
Present Modaily: 이전 뷰컨트롤러를 덮으면서 새로운 화면이 나타나게 된다.
Present As Popover: 아이패드에서 팝업창을 띄울때 사용한다.
Custom: 세그웨이를 사용자가 원하는 방식으로 커스텀 할 때 사용한다.
다양한 방법으로 화면전환 해보기
화면전환 구현 코드
//Present
//코드로 Present할 때 사용 할 수 있는 메소드
@IBAction func tapCodePresentBotton(_ sender: UIButton) {
guard let viewController2 = self.storyboard?.instantiateViewController(withIdentifier: "CodePresentBiewController") else { return }
self.present(viewController2, animated: true)
}
//Present로 화면전환 했을 때 Back버튼 코드
@IBAction func tapBackBotton(_ sender: UIButton) {
self.presentingViewController?.dismiss(animated: true)
}
//-----------
//Push
//코드로 Push 할 때 사용 할 수 있는 메소드
@IBAction func tapCodePushBotton(_ sender: UIButton) {
guard let viewController = self.storyboard?.instantiateViewController(withIdentifier: "CodePushViewController") else { return }
self.navigationController?.pushViewController(viewController, animated: true)
}
//Push로 화면전환 했을 때 Back버튼 코드
@IBAction func backBotton(_ sender: UIButton) {
self.navigationController?.popViewController(animated: true)
}
View Controller Life Cycle
UIViewController의 객체에는 View객체를 관리하는 메서드 들이 정의되어있다
메서드들은 자신들이 호출되어야 하는 타이밍에 IOS시스템에 의해 자동으로 호출된다.
의 하이클래스를 생성할 때 에 정의 된 이 메서드들을 오버라이드하여 라이프사이클 상황에 맞게 적절한 로직들을 메서드에 추가할 수 있다.
시스템이 어떤 메서드를 언제 호출해야하는지 먼저 이해해야만 그 시점에 잘 맞춰 UI의 변화나 데이터의 변화를 잘 처리 할 수 있다.
ViewDidLoad()
- 뷰 컨트롤러의 모든 뷰들이 메모리에 로드됐을 때 호출
- 메모리에 처음 로드 될 때 한 번만 호출
- 보통 딱 한번 호출될 행위들을 이 메소드 안에 정의 함
- 뷰와 관련된 추가적인 초기화 작업, 네트워크 호출
ViewWillAppear()
- 뷰가 뷰 계충에 추가되고, 화면에 보이기 직전에 매 번 호출
- 다른 뷰로 이동했다가 돌아오면 재호출
- 뷰와 관련된 추가적인 초기화작업
ViewDidAppear()
- 뷰 컨트롤러의 뷰가 뷰 계층에 추가된 후 호출
- 뷰를 나타낼 때 필요한 추가작업
- 애니메이션을 시작하는 작업
viewWillDisappear()
- 뷰 컨트롤러의 뷰가 뷰 계층에서 사라지기 전에 호출
- 뷰가 생성된 뒤 작업한 내용을 되돌리는 작업
- 최종적으로 데이터를 저장하는 작업
viewDidDisappear()
- 뷰 컨트롤러의 뷰가 뷰 계층에서 사라진 뒤에 호출
- 뷰가 사라지는 것과 관련된 추가 작업
ViewController 의 라이프사이클은 뷰의 상태변화에 따라 시스템에 의해 특정 메소드를 호출한다.