์ดํ ์ง์ญ
@MainActor class UINavigationController : UIViewController
๊ณ์ธต์ ์ฝํ ์ธ ๋ฅผ ํ์ํ๊ธฐ ์ํ ์คํ ๊ธฐ๋ฐ์ ์ฒด๊ณ๋ฅผ ์ ์ํ๋ ์ปจํ ์ด๋ ๋ทฐ ์ปจํธ๋กค๋ฌ์ด๋ค.
๋ค๋น๊ฒ์ด์
์ปจํธ๋กค๋ฌ๋ ํ๋ ํน์ ๊ทธ ์ด์์ ์์ ๋ทฐ ์ปจํธ๋กค๋ฌ๋ค์ ๋ค๋น๊ฒ์ด์
์ธํฐํ์ด์ค ์์์ ๊ด๋ฆฌํ๋ ํ๋์ container view controller
์ด๋ค. ์ด ์ธํฐํ์ด์ค ์์์๋ ํ ์์ ์ ์ค์ง ํ๋์ ์์ ๋ทฐ ์ปจํธ๋กค๋ฌ๋ง์ด ๋ณด์ฌ์ง ์ ์๋ค.
๋ค๋น๊ฒ์ด์ ์ธํฐํ์ด์ค๋ ๋ฐ์ดํฐ ๊ณ์ธต ์กฐ์ง์ ๋ชจ๋ฐฉํ๋๋ฐ, ์ด ์ธํฐํ์ด์ค๋ ๋น์ ์ ์ฑ์ ์ํด ๊ด๋ฆฌ๋๋ค.
Figure 1 A sample navigation interface
๋ทฐ ์ปจํธ๋กค๋ฌ ๋ด๋ถ์ ์ด๋ค ์์๋ฅผ ์ ํํ์ฌ ์๋ก์ด ๋ทฐ ์ปจํธ๋กค๋ฌ๋ฅผ ๋์ธ ์ ์๋ค. ์ด ๋, ์๋ก์ด ๋ทฐ ์ปจํธ๋กค๋ฌ๋ ์ด์ ์ ๋ทฐ ์ปจํธ๋กค๋ฌ ์๋ก ์ ๋๋ฉ์ด์ ๊ณผ ํจ๊ป ์ฌ๋ผ์ค๊ฒ ๋๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก ๋ค๋น๊ฒ์ด์ ๋ฐ์ ์์นํ ๋ค๋ก๊ฐ๊ธฐ ๋์์ ์ทจํ ๋์๋ ํ์ฌ ๋ทฐ ์ปจํธ๋กค๋ฌ๋ฅผ ์คํ์์ ์ง์์ผ๋ก์จ ๋ฐ์ ๊ฐ๋ ค์ ธ ์๋ ์ด์ ์ ๋ทฐ ์ปจํธ๋กค๋ฌ๊ฐ ๋ฑ์ฅํ๊ฒ ๋๋ค.
๋ค๋น๊ฒ์ด์
์ปจํธ๋กค๋ฌ ๊ฐ์ฒด๋ Navigation Stack
์ด๋ผ๊ณ ์๋ ค์ง ์ ๋ ฌ๋ ๋ฐฐ์ด์ ์ฌ์ฉํ์ฌ ์ด๋ค์ ์์ ๋ทฐ ์ปจํธ๋กค๋ฌ๋ค์ ๊ด๋ฆฌํ๋ค. ๋ฐฐ์ด์ ๊ฐ์ฅ ์ฒ์์ ์๋ ๋ทฐ ์ปจํธ๋กค๋ฌ๋ root view controller
๋ผ๊ณ ๋ถ๋ฅด๋ฉฐ, ์ด๋ ์คํ ๊ธฐ์ค์ผ๋ก ๊ฐ์ฅ ๋ฐ์ ์์นํด์๋ค.
segue ํน์ UINavigationController ํด๋์ค์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํด์ ๋ทฐ ์ปจํธ๋กค๋ฌ๋ค์ ์ถ๊ฐํ๊ฑฐ๋ ์ง์ธ ์ ์๋ค. ๋ํ ์ฌ์ฉ์๋ ๋ค๋ก๊ฐ๊ธฐ ๋ฒํผ ํน์ left-edge swipe gesture๋ฅผ ํตํด ๊ฐ์ฅ ์ต์์ ๋ทฐ ์ปจํธ๋กค๋ฌ๋ฅผ ์ง์ธ ์ ์๋ค(์ด์ ๋ทฐ๋ก ๋์๊ฐ๊ธฐ).
๋ค๋น๊ฒ์ด์
์ปจํธ๋กค๋ฌ๋ ์ธํฐํ์ด์ค์ ์ต์๋จ์ ์์นํ navigation bar
์ ์ธํฐํ์ด์ค ์ตํ๋จ์ ์์นํ ์ต์
๋(?
) toolbar
๋ฅผ ๊ฐ์ง๋ค.
navigation bar
๋ ํญ์ ๋ณด์ฌ์ง๋ฉฐ ๋ค๋น๊ฒ์ด์
์ปจํธ๋กค๋ฌ ์์ฒด์ ์ผ๋ก ์์ ๋ทฐ์ปจํธ๋กค๋ฌ์์ ์ ๊ณต๋๋ ๋ด์ฉ์ ํ ๋๋ก ์
๋ฐ์ดํธ ์ํค๋ฉด์ ๊ด๋ฆฌ๋๋ค. isToolbarHidden ์์ฑ์ด false ์ธ ์ํ๋ผ๋ฉด ์์ ๋น์ทํ ๋ฐฉ์์ผ๋ก toolbar
๋ํ ์ต์์ ๋ทฐ๊ฐ ์ ๊ณตํ๋ ๋ด์ฉ์ ๊ธฐ๋ฐ์ผ๋ก ์
๋ฐ์ดํธ ๋๋ฉฐ ๊ด๋ฆฌ๋๋ค.
๋ค๋น๊ฒ์ด์ ์ปจํธ๋กค๋ฌ๋ ์์ ์ delegate ๊ฐ์ฒด์์ ๋ง์ถฐ ํ๋ํ๋ค. delegate๊ฐ์ฒด๋ ์๋์ ๊ฒ๋ค์ ํ ์ ์๋ค.
- ๋ทฐ ์ปจํธ๋กค๋ฌ์ push/pop ์ฌ์ ์
- ์ฌ์ฉ์ ์ง์ ์ ๋๋ฉ์ด์ ์ ํ ์ ๊ณต
- ๋ค๋น๊ฒ์ด์ ์ธํฐํ์ด์ค์ ๊ธฐ๋ณธ ๋ฐฉํฅ ๋ช ์
์ฌ์ฉ์๊ฐ ์์ฑํ delegate๋ ๋ฐ๋์ UINavigationControllerDelegate ํ๋กํ ์ฝ์ ์ค์ํด์ผํ๋ค.
Figure 2 Objects managed by the navigation controller
๋ค๋น๊ฒ์ด์
์ปจํธ๋กค๋ฌ๋ container view controller
์ด๋ค. ์ฆ, ๋ค๋ฅธ ๋ทฐ ์ปจํธ๋กค๋ฌ๋ค์ ๋ด์ฉ์ด ์์ ์ ์์ ๋ด์ฅ๋์ด ์๋ค. ์ฐ๋ฆฌ๋ view
ํ๋กํผํฐ๋ฅผ ํตํด ๋ค๋น๊ฒ์ด์
์ปจํธ๋กค๋ฌ์ ๋ทฐ์ ์ ๊ทผํ ์ ์๋ค. ์ด view
๋ navigation bar, ์ต์
๋์ธ toolbar, ๊ทธ๋ฆฌ๊ณ ์ต์์ ๋ทฐ ์ปจํธ๋กค๋ฌ์ content view๋ฅผ ํตํฉํ๋ค. ๋น๋ก navigation bar, toolbar์ ๋ด์ฉ ์์ฒด๋ ๋ณ๊ฒฝ์ด ๋ ์ง๋ผ๋, ๋ทฐ ์์ฒด๋ ๋ณ๊ฒฝ๋์ง ์๋๋ค. view
๊ฐ ํตํฉํ๊ณ ์๋ ์ฌ๋ฌ ์์๋ค ์ค ๋ณํ๋ ๊ฒ์ navigation stack
์ ์ํด ์ ๊ณต๋๋ ์ต์์ ๋ทฐ ์ปจํธ๋กค๋ฌ์ content view์ด๋ค.
Figure 3 The views of a navigation controller
iOS7 ๋ถํฐ๋ content view๊ฐ navigation bar ์๋ ์๊ธฐ ๋๋ฌธ์ ๋ทฐ๋ฅผ ๊ตฌ์ฑํ ๋ ์ด๋ฅผ ๊ณ ๋ คํด์ผํ๋ค.
๋ค๋น๊ฒ์ด์
์ปจํธ๋กค๋ฌ๋ navigation bar์ toolbar์ ์์ฑ๊ณผ ์ค์ ๊ทธ๋ฆฌ๊ณ ๋ณด์ด๋ ๊ฒ์ ๊ด๋ฆฌํ๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ navigation bar์ ์ธํ์ ์ธ ํ๋กํผํฐ๋ค์ ์ฌ์ฉ์ํ ํ๋๊ฒ์ด ํ๋ฝ๋์ง๋ง frame
, bounds
, alpha
๋ ๋ฐ๊ฟ์๋ ์๋๋ค. ๋ง์ฝ UINavigationBar๋ฅผ ์์ํ๋ค๋ฉด, ๋ฌด์กฐ๊ฑด init(navigationBarClass:toolbarClass:)๋ฅผ ํตํด initializeํด์ผํ๋ค. navigation bar๋ฅผ ์จ๊ธฐ๊ฑฐ๋ ๋ณด์ด๊ฒ ํ๊ณ ์ถ๋ค๋ฉด isNavigationBarHidden ํน์ setNavigationBarHidden(_:animated:) ๋ฉ์๋๋ฅผ ์ฌ์ฉํด์ผํ๋ค.
๋ค๋น๊ฒ์ด์ ์ปจํธ๋กค๋ฌ๋ UINavtigationItem class์ ์ธ์คํด์ค์ธ navigation item ๊ฐ์ฒด๋ฅผ ์ด์ฉํ์ฌ navigation bar ๋ฅผ ๊ตฌ์ฑํ๋ค. navigation bar์ ์ ๋ฐ์ ์ธ ์ธํ์ ์ฌ์ฉ์ํ ํ๊ณ ์ถ๋ค๋ฉด UIAppearance API๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
์ต์์ ๋ทฐ ์ปจํธ๋กค๋ฌ๊ฐ ๋ฐ๋ ๋๋ง๋ค ๋ค๋น๊ฒ์ด์
์ปจํธ๋กค๋ฌ๋ navigation bar๋ฅผ ๊ทธ์ ๋ง๊ฒ ์
๋ฐ์ดํธํ๋ค. ํนํ ๋ค๋น๊ฒ์ด์
์ปจํธ๋กค๋ฌ๋ ์ข์ธก, ์ค์, ์ฐ์ธก์ ์์นํ๋ bar button item
์ ๋์คํ๋ ์ด๋ฅผ ์
๋ฐ์ดํธ ํ๋ค. Bar button items
์ UIBarButtonItem ํด๋์ค์ ์ธ์คํด์ค์ด๋ค. ์ฐ๋ฆฌ๋ ํ์์ ๋ง๊ฒ ์ด๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ค.
navigation bar์ ์์์ ๋ฃ๋ ๊ฒ์ tintColor
, barTintColor
์์ฑ์ ์ํด ๋ณ๊ฒฝ ๊ฐ๋ฅํ๋ค.
tintColor
๋ bar ๋ด๋ถ item๋ค์ tint color๋ฅผ ๋ณ๊ฒฝํ๋ค. ๊ทธ๋ฆฌ๊ณ bar ์์ฒด์ tint color๋ฅผ ๋ณ๊ฒฝํ ๋์๋ barTintColor
๋ฅผ ์ฌ์ฉํ๋ค. Navigation Bar๋ ํ์ฌ ๋ณด์ฌ์ง๊ณ ์๋ ๋ทฐ ์ปจํธ๋กค๋ฌ๋ก์ tint color๋ฅผ ์์ํ์ง ์๋๋ค.