티스토리 뷰

TIL

[TIL] 2022 / 07 / 16

희철 2022. 7. 17. 04:00

뷰컨트롤러 생명주기

 

 

viewDidLoad()

-> 컨트롤러의 뷰가 메모리에 올라갔을때 실행됨.

 

viewWillAppear()

-> 뷰컨트롤러에 뷰가 뷰 계층구조에 추가될 예정이라고 알려줌.

 

viewDidAppear()

-> 뷰컨트롤러에 뷰가 뷰 계층구조에 추가되었다고 알려줌.

 

viewWillDisappear()

-> 뷰컨트롤러에 뷰가 뷰 계층구조에서 지워질 예정이라고 알려줌.

 

viewDidDisappear()

-> 뷰컨트롤러에 뷰가 뷰 계층구조에 지워졌다고 말해줌.

 

 

실습을 통해 언제 실행되는지 확인해봄.

 

 

시뮬레이터를 실행시켰을때

 

탭바를 이용해 뷰를 바꿔주었을때

 

다시 이전 화면으로 탭바를 이용해 돌아갔을때

 

여기까지 알 수 있는 점

 

-> 화면이 처음 보여질때만 viewDidAppear가 실행되고 그 이후엔 실행되지않음.

 

-> 보여질 뷰컨트롤러의 viewWillAppear가 가장 먼저 실행되고, 지워질 뷰컨트롤러의 viewWillDisappear, viewDidDisappear가 실행되고 나서야 viewDidAppear가 실행돼서 뷰가 보여짐.

 

Present Modally로 화면을 띄웠을 때(page sheet)

새로운 화면을 처음 띄울때처럼 위의 세 개만 실행됨

-> 왼쪽 사진에서 볼 수 있듯이 뒤의 뷰가 남아있으므로 disappear관련 함수가 실행되지 않음.

 

위와 다르게 fullScreen으로 화면을 띄웠을 때

이전의 뷰가 안보이게되므로 disappear관련 함수가 실행됨.

 

unwind로 뷰를 내렸을때

신기하게 돌아갈 뷰가 보여지고 난 뒤에 이전 뷰가 사라짐.

 

위에서 modal하게 띄운 뷰를 내렸을때

-> 위에서 말했듯이 이미 뒤의 뷰가 보여지고 있었으므로 appear관련 함수가 실행되지않음.

 

Push로 네비게이션에 연결된 화면을 띄울 때

탭바와 다름(Push라 그런듯)

-> 탭바에선 새로운 뷰가 메모리에 올라가기전에 이전 뷰의 viewWillDisappear가 실행됐는데, 네비게이션의 Push에서는 다음 뷰의 viewDidLoad가 먼저 실행됨

 

백버튼으로 다시 이전 화면으로 돌아갈 때(Pop)

마찬가지로 탭바와 다름(Pop이라 그런듯)

-> 다음 뷰의 viewWillAppear보다 이전 뷰의 viewWillDisappear가 먼저 실행됨.

 

 

UserDefaults로 딕셔너리 저장

 

let dic: [String: String] = [:]

UserDefaults.standard.set(dic, forKey: "dic")

방법은 똑같지만 데이터를 불러올 때 주의해야함.

 

[String: Any]? 형태로 반환되기때문에 만약 값을 쓰기 위해서는 as를 이용해 바꿔주어야함.

 

 

코드로 뷰컨트롤러 띄우기

 

 

let sb = UIStoryboard(name: "Main", bundle: nil)
                    
guard let vc = sb.instantiateViewController(withIdentifier: "SecondViewController") as? SecondViewController else { return }
vc.modalPresentationStyle = .fullScreen
// modalPreesentationStyle은 원하는대로 정하면됨.
self.present(vc, animated: true)

여기서 주의해야 할 점은 뷰컨트롤러의 Storyboard ID를 입력하고 그 ID를 withIdentifier에 입력해야한다.

 

Alert에서 버튼을 눌렀을 때 액션을 원하면 present의 completion이 아닌 UIAlertAction의 handler에서 작성.

 

______________________________________________________________________________________________________

 

넷플릭스 과제 추가 구현

 

1. 로그인 뷰 만듦

-> 회원가입과 로그인 버튼 구현

-> 아이디와 비밀번호를 UserDefaults로 확인 후 맞으면 영화목록 뷰를 띄우고, 틀리거나 없는 경우엔 alert띄움.

 

2. 로그인뷰에서 회원가입버튼을 누르면 회원가입화면을 띄움.

 

3. 회원가입이 제대로 이루어지면 alert와 함께 회원가입뷰가 내려가고 로그인뷰가 나타나게함.

'TIL' 카테고리의 다른 글

[TIL] 2022 / 07 / 18  (0) 2022.07.18
[TIL] 2022 / 07 / 17  (0) 2022.07.17
[TIL] 2022 / 07 / 15  (0) 2022.07.16
[TIL] 2022 / 07 / 14  (0) 2022.07.15
[TIL] 2022 / 07 / 13  (0) 2022.07.13
댓글
최근에 올라온 글
Total
Today
Yesterday