ViewController Transition
- Present - Dismiss (a.k.a Modal)
Present - Dismiss ๋ ์ธํฐํ์ด์ค ๋น๋ ์์์๋ Modal ์ด๋ผ๊ณ ๋ถ๋ฆฌ๋ ํ๋ฉด์ ํ ๋ฐฉ์์ ๋๋ค. ๋ฐ๋ผ์ ์๋์์ ์, ์์์ ์๋๋ก ํ๋ฉด์ ํ์ด ์ผ์ด๋๋ค๊ณ ์์ธกํด๋ณผ ์ ์์ต๋๋ค. ์ฐ์ ๊ทธ ์ค์์ Present๋ฅผ ๊ตฌํํ ์ ์๋ ์ฝ๋๋ฅผ ์์๋ด ์๋ค.
์ฐ์ ๊ฐ์ฅ ์ค์ํ ์ง์ ์ ์ ์ฝ๋์์ ์ฃผ์์ ๋จ 1๋ฒ, 2๋ฒ, 3๋ฒ์ ๋๋ค. 2.5๋ฒ๊ณผ ๊ฐ์ ๋ถ๋ถ์ ํ์์ ๋ฐ๋ผ ์ถ๊ฐํ๋ฉด ๋์ง๋ง, ํ๋ฉด์ ํ์ ๊ตฌํํ ๋์๋ ๋ฐ๋์ 1๋ฒ, 2๋ฒ, 3๋ฒ์ ์ ์ด์ฃผ์ด์ผ ํฉ๋๋ค. ์ ์ฝ๋์์๋ present ๋ฐฉ์์ style๋ฅผ fullscreen์ผ๋ก ํ๊ธฐ ๋๋ฌธ์, ์ ํ๋ ํ๋ฉด์๋ ํ๋ฉด์ ๋ซ์ ์ ์๋ ๋ฒํผ์ด ์์ผ๋ฏ๋ก bar button item์ ํ์ฉํด์ ๋ซ๊ธฐ ๋ฒํผ์ ๊ตฌํํด์ฃผ๊ธฐ ์ํด NavigationController์ ์๋ฒ ๋๋ ํด์ฃผ์์ต๋๋ค.
๋ค์์ Dismiss ๊ตฌํ๋ฐฉ์์ ๋๋ค. ๋ซ๊ธฐ ๋ฒํผ์ selector๋ก ๋ฃ์ด์ฃผ๊ธฐ ์ํด, ๋ฐ๋ก closeButtonClicked()๋ผ๋ ๋ฉ์๋์ ์ฝ๋๋ฅผ ๋ฃ์ด์ฃผ์์ต๋๋ค. Dismiss๋ Present์ ๋นํด ๊ฐ๋จํ๊ฒ ์์ฑ๋ฉ๋๋ค.
- Push - Pop (a.k.a Show)
Push - Pop์ ์ธํฐํ์ด์ค ๋น๋์์์ Show๋ผ๊ณ ๋ถ๋ฆฌ๋ ํ๋ฉด์ ํ ๋ฐฉ์์ ๋๋ค. ๋ฐ๋ผ์ ํ๋ฉด์ ํ์ด ์ข์ฐ๋ก ์ด๋ฃจ์ด์ง๋ค๋ ๊ฑธ ์์ธกํด๋ณผ ์ ์์ต๋๋ค. Push - Pop ๊ณผ Present - Dismiss ์ ๊ตฌํ ๋ฐฉ์์ ํฌ๊ฒ ๋ค๋ฅด์ง ์์ต๋๋ค. ๋ค๋ง ๋ค๋ฅธ ์ ์ด๋ผ ํ๋ฉด, Push - Pop ์ ๋ฐ๋์ NavigationController ๊ฐ ์๋ฒ ๋ ๋์ด ์์ด์ผ ํ๋ฉด ์ ํ์ด ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ ๋๋ค.
๊ธฐ๋ณธ์ ์ธ ๊ตฌํ ๋ฐฉ์์ ๋น์ทํ๋, 3๋ฒ ๋ถ๋ถ์ด ์์ฑ๋ฐฉ์์ด ์กฐ๊ธ ๋ค๋ฅธ ๊ฒ์ ์ ์ ์์ต๋๋ค. 3๋ฒ ์ฝ๋์์ NavigationController๊ฐ ์ ๋๋ก ์๋ฒ ๋ ๋์ด์์ง ์์ผ๋ฉด, ์ต์ ๋์ฒด์ด๋์ผ๋ก ์ธํด Nil์ด ๋ฐ์ํ์ฌ ์ฝ๋๊ฐ ์ ๋๋ก ๋์ํ์ง ์๊ฒ ๋๋ ๋ฐ๋์ ๋ฃจํธ๋ทฐ๊ฐ NavigationController์ ์ ๋๋ก ์๋ฒ ๋ ๋์ด ์๋์ง ํ์ธํด์ฃผ์ด์ผ ํฉ๋๋ค.
@IBAction func closeButtonClicked(_ sender: UIButton) {
navigationController?.popViewController(animated: true)
}
Pop์ ๊ฒฝ์ฐ๋ Dismiss์ ๋ง์ฐฌ๊ฐ์ง๋ก ๊ฐ๋จํ๊ฒ ๊ตฌํ๋ฉ๋๋ค.
Optional Binding(์ต์ ๋ ๋ฐ์ธ๋ฉ)
์ต์ ๋ ๋ฐ์ธ๋ฉ์ด๋ ์ต์ ๋์ ์์ ํ๊ฒ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๋๋ค. ์ต์ ๋์ ํด์ ํ๊ธฐ ์ํด ๊ฐ์ ํด์ ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ฉด, ์ต์ ๋์ด Nil๊ฐ์ ๊ฐ์ง ๋ crash ๊ฐ ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ ์์ ํ๊ฒ ์ฒ๋ฆฌํ๊ธฐ ์ํด์ ์ต์ ๋ ๋ฐ์ธ๋ฉ์ ์ฌ์ฉํฉ๋๋ค.
์๋ Optional String ํ์ ์ด์๋ kate ์ jacob์ she ์ him ์ด๋ผ๋ ์๋ก์ด ๋ณ์(Type: String)์ ์ ์ฅํจ์ผ๋ก์จ, ์์ ํ๊ฒ Optional์ ์ฒ๋ฆฌํ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ else ๊ตฌ๋ฌธ์ผ๋ก Optional์ด Nil๊ฐ์ ๊ฐ์ง ๋๋ฅผ ์ฒ๋ฆฌํด์ฃผ์์ต๋๋ค.
๋ค์์ ์์ ์์์ ๋์ผํ๊ฒ guard ๊ตฌ๋ฌธ์ผ๋ก Optinal ์ ์ฒ๋ฆฌํด์ค ์ฝ๋์ ๋๋ค. guard์ ๊ฒฝ์ฐ optional์ ์ฒ๋ฆฌํ๋ ๊ณผ์ ์์ Nil ๊ฐ์ด ๋์ค๋ฉด else ๊ตฌ๋ฌธ์ ๋ฐํํ๊ณ ์ฝ๋๊ฐ ๋๋๋ค๋ ํน์ง์ด ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์กฐ๊ฑด๋ฌธ์ด๋์ ์กฐ๊ธ ๋ฌ๋ผ์, guard์์ ์ ์ธํ ๋ณ์๋ฅผ ์ค์ฝํ ๋ฐ๊นฅ์์๋ ์ฌ์ฉํ ์ ์๋ค๋ ํน์ง์ด ์์ต๋๋ค.
์ธ์คํด์ค ํ๋กํผํฐ vs ํ์ ํ๋กํผํฐ
์ธ์คํด์ค ํ๋กํผํฐ์ ํ์ ํ๋กํผํฐ๋ ์ด๋ป๊ฒ ๋ค๋ฅผ๊น์?
์ฐ์ ์ฐ๋ฆฌ์๊ฒ ๊ฐ์ฅ ์ต์ํ ํ๋กํผํฐ๋ ์ธ์คํด์ค ํ๋กํผํฐ์ ๋๋ค. ํด๋์ค์ ํ๋กํผํฐ์ ์ ๊ทผํ๊ธฐ ์ํด์๋ ์ธ์คํด์ค๊ฐ ํ์ํ๊ธฐ ๋๋ฌธ์ ์ธ์คํด์ค ํ๋กํผํฐ๋ผ๊ณ ๋ถ๋ฆฝ๋๋ค. ๋ ๋ณ์๋ ์์๋ฅผ ์ ์ฅํด์ ์ฌ์ฉํ๋ ํ๋กํผํฐ์ด๊ธฐ ๋๋ฌธ์ ์ ์ฅ ํ๋กํผํฐ๋ผ๊ณ ๋ ๋ถ๋ฆฝ๋๋ค. ํ์ ํ๋กํผํฐ๋ ์ธ์คํด์ค๋ฅผ ๋ง๋ค ๋ ์ด๊ธฐํํ ๊ณต๊ฐ์ ๋ฐ๋ก ๋ง๋ค์ง ์๊ณ , ํ์ ๊ทธ ์์ฒด๋ก ์ฌ์ฉ๋๋ ํ๋กํผํฐ์ ๋๋ค. ์ธ์คํด์ค ํ๋กํผํฐ์ ๊ฐ์ ์ ์ฅ ํ๋กํผํฐ์ด์ง๋ง, ์ธ์คํด์ค๋ก ์ ๊ทผํ๋๊ฒ ์๋ ๊ทธ๋ฅ ํ์ ์ด ๊ฐ์ง๊ณ ์๋ ํ๋์ ์์๋ก์ ์ฌ์ฉ๋ฉ๋๋ค. ๋ฐ๋ผ์ ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ค๊ณ ํด์ ์ด๊ธฐํ๋์ง ์๊ณ ๋ฐ๋ก ํธ์ถํ์ง ์์ผ๋ฉด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฐจ์งํ์ง๋ ์์ต๋๋ค. ๊ทธ๋ฌ๊ธฐ ๋๋ฌธ์ ์ฒ์๋ถํฐ ๊ฐ์ ๊ฐ์ง๊ณ ์๋ ์ํ๋ก ์ด๊ธฐํ๋ฅผ ํด์ฃผ์ด์ผ ํฉ๋๋ค.
'iOS > TIL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
22.07.20 ใ ฃ UICollectionViewController & Struct ๊ตฌ์กฐ์ฒด ํ์ฉ (0) | 2022.07.20 |
---|---|
22.07.18 - 19 ใ ฃ Enum CaseIterable & Table View (0) | 2022.07.19 |
22.07.13 ใ ฃ Class & Struct (0) | 2022.07.14 |
22.07.12 ใ ฃ์ด๊ฑฐํ & ํจ์์ ๋ฐํ๊ฐ & Raw String (0) | 2022.07.12 |
22.07.06 ใ ฃ์ฑ์ ์๋ช ์ฃผ๊ธฐ & AppDelegate vs SceneDelegate & ๋คํฌ ๋ชจ๋ & UIWindow (0) | 2022.07.06 |