Skip to content

Latest commit

ย 

History

History
70 lines (41 loc) ยท 6.68 KB

UINavigationController.md

File metadata and controls

70 lines (41 loc) ยท 6.68 KB

UINavigationController ์˜ ์—ญํ• ์ด ๋ฌด์—‡์ธ์ง€ ์„ค๋ช…ํ•˜์‹œ์˜ค.

์ฐธ๊ณ ํ•œ ์ข‹์€ ๊ธ€

๋‹ต์•ˆ

์ดํ•˜ ์ง์—ญ

Declaration

@MainActor class UINavigationController : UIViewController

Overview

๊ณ„์ธต์  ์ฝ˜ํ…์ธ ๋ฅผ ํƒ์ƒ‰ํ•˜๊ธฐ ์œ„ํ•œ ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ์ฒด๊ณ„๋ฅผ ์ •์˜ํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ์ด๋‹ค.

๋„ค๋น„๊ฒŒ์ด์…˜ ์ปจํŠธ๋กค๋Ÿฌ๋Š” ํ•˜๋‚˜ ํ˜น์€ ๊ทธ ์ด์ƒ์˜ ์ž์‹ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๋“ค์„ ๋„ค๋น„๊ฒŒ์ด์…˜ ์ธํ„ฐํŽ˜์ด์Šค ์•ˆ์—์„œ ๊ด€๋ฆฌํ•˜๋Š” ํ•˜๋‚˜์˜ container view controller์ด๋‹ค. ์ด ์ธํ„ฐํŽ˜์ด์Šค ์•ˆ์—์„œ๋Š” ํ•œ ์‹œ์ ์— ์˜ค์ง ํ•˜๋‚˜์˜ ์ž์‹ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๋งŒ์ด ๋ณด์—ฌ์งˆ ์ˆ˜ ์žˆ๋‹ค.

๋„ค๋น„๊ฒŒ์ด์…˜ ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๋ฐ์ดํ„ฐ ๊ณ„์ธต ์กฐ์ง์„ ๋ชจ๋ฐฉํ•˜๋Š”๋ฐ, ์ด ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๋‹น์‹ ์˜ ์•ฑ์— ์˜ํ•ด ๊ด€๋ฆฌ๋œ๋‹ค.

image

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๊ฐ์ฒด๋Š” ์•„๋ž˜์˜ ๊ฒƒ๋“ค์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

  1. ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ์˜ push/pop ์žฌ์ •์˜
  2. ์‚ฌ์šฉ์ž ์ง€์ • ์• ๋‹ˆ๋ฉ”์ด์…˜ ์ „ํ™˜ ์ œ๊ณต
  3. ๋„ค๋น„๊ฒŒ์ด์…˜ ์ธํ„ฐํŽ˜์ด์Šค์˜ ๊ธฐ๋ณธ ๋ฐฉํ–ฅ ๋ช…์‹œ

์‚ฌ์šฉ์ž๊ฐ€ ์ƒ์„ฑํ•œ delegate๋Š” ๋ฐ˜๋“œ์‹œ UINavigationControllerDelegate ํ”„๋กœํ† ์ฝœ์„ ์ค€์ˆ˜ํ•ด์•ผํ•œ๋‹ค.

image

Figure 2 Objects managed by the navigation controller

Navigation Controller Views

๋„ค๋น„๊ฒŒ์ด์…˜ ์ปจํŠธ๋กค๋Ÿฌ๋Š” container view controller์ด๋‹ค. ์ฆ‰, ๋‹ค๋ฅธ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๋“ค์˜ ๋‚ด์šฉ์ด ์ž์‹ ์˜ ์•ˆ์— ๋‚ด์žฅ๋˜์–ด ์žˆ๋‹ค. ์šฐ๋ฆฌ๋Š” view ํ”„๋กœํผํ‹ฐ๋ฅผ ํ†ตํ•ด ๋„ค๋น„๊ฒŒ์ด์…˜ ์ปจํŠธ๋กค๋Ÿฌ์˜ ๋ทฐ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด view๋Š” navigation bar, ์˜ต์…”๋„์ธ toolbar, ๊ทธ๋ฆฌ๊ณ  ์ตœ์ƒ์œ„ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ์˜ content view๋ฅผ ํ†ตํ•ฉํ•œ๋‹ค. ๋น„๋ก navigation bar, toolbar์˜ ๋‚ด์šฉ ์ž์ฒด๋Š” ๋ณ€๊ฒฝ์ด ๋  ์ง€๋ผ๋„, ๋ทฐ ์ž์ฒด๋Š” ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋Š”๋‹ค. view๊ฐ€ ํ†ตํ•ฉํ•˜๊ณ  ์žˆ๋Š” ์—ฌ๋Ÿฌ ์š”์†Œ๋“ค ์ค‘ ๋ณ€ํ•˜๋Š” ๊ฒƒ์€ navigation stack์— ์˜ํ•ด ์ œ๊ณต๋˜๋Š” ์ตœ์ƒ์œ„ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ์˜ content view์ด๋‹ค.

image

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๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

Updating the Navigation Bar

์ตœ์ƒ์œ„ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ๋ฐ”๋€” ๋•Œ๋งˆ๋‹ค ๋„ค๋น„๊ฒŒ์ด์…˜ ์ปจํŠธ๋กค๋Ÿฌ๋Š” 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๋ฅผ ์ƒ์†ํ•˜์ง€ ์•Š๋Š”๋‹ค.