Bibi's DevLog ๐ค๐
[๐ / UIKit] UINavigationController ๋ณธ๋ฌธ
[๐ / UIKit] UINavigationController
๋น๋น bibi 2022. 9. 23. 16:07[UIKit] UINavigationController
UINavigtaionController
ํด๋์ค
๊ณ์ธต์ ์ธ ๋ด์ฉ์ ํ์ํ๊ธฐ ์ํ ์คํ ๊ธฐ๋ฐ์ scheme์ ์ ์ํ ์ปจํ ์ด๋ ๋ทฐ ์ปจํธ๋กค๋ฌ.
์ ์ธ
@MainActor class UINavigationController : UIViewController
๊ฐ์
navigation controller๋ ํ๋ ์ด์์ ์์ ๋ทฐ ์ปจํธ๋กค๋ฌ๋ค์ ๋ด๋น๊ฒ์ด์ ์ธํฐํ์ด์ค๋ก ๊ด๋ฆฌํ๋ ์ปจํ ์ด๋ ๋ทฐ ์ปจํธ๋กค๋ฌ์ ๋๋ค. ์ด ์ ํ์ ์ธํฐํ์ด์ค์์๋, ํ ๋ฒ์ ์ค์ง ํ๋์ ์์ ๋ทฐ ์ปจํธ๋กค๋ฌ๋ง ๋ณด์ด๊ฒ ํ ์ ์์ต๋๋ค. ๋ทฐ ์ปจํธ๋กค๋ฌ์์ ์์๋ฅผ ์ ํํ๋ฉด ์๋ก์ด ๋ทฐ ์ปจํธ๋กค๋ฌ๊ฐ ์ ๋๋ฉ์ด์ ์ ์ฌ์ฉํด ์คํฌ๋ฆฐ์ ๋ค์ด์ค๋ฉฐ(push), ์ด์ ์ ๋ทฐ ์ปจํธ๋กค๋ฌ๋ ์จ๊ฒจ์ง๋๋ค. ์ธํฐํ์ด์ค ๋งจ ์์ ๋ด๋น๊ฒ์ด์ ๋ฐ์ ์๋ ๋ค๋ก ๊ฐ๊ธฐ ๋ฒํผ(back button)์ ๋๋ฅด๋ฉด ๋งจ ์์ ๋ทฐ ์ปจํธ๋กค๋ฌ(top view controller)๊ฐ ์ ๊ฑฐ๋๋ฉฐ, ๊ทธ๋ก ์ธํด ์๋์ ๋ทฐ ์ปจํธ๋กค๋ฌ๊ฐ ๋๋ฌ๋ฉ๋๋ค.
๋น์ ์ ์ฑ์ ์ํด ๊ด๋ฆฌ๋๋ ๊ณ์ธต์ ๋ฐ์ดํฐ์ ๊ตฌ์กฐ๋ฅผ ํ๋ด๋ด๊ธฐ ์ํด ๋ด๋น๊ฒ์ด์ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ์ญ์์ค. ๊ณ์ธต์ ๊ฐ ์์ค์์, ๊ทธ ์์ค์ ๋ํ ์ปจํ ์ธ ๋ฅผ ๋ณด์ฌ์ฃผ๊ธฐ ์ํด (์ปค์คํ ๋ทฐ ์ปจํธ๋กค๋ฌ์ ์ํด ๊ด๋ฆฌ๋๋) ์ ์ ํ ํ๋ฉด์ ์ ๊ณตํด์ผ ํฉ๋๋ค. ๊ทธ๋ฆผ1์ iOS ์๋ฎฌ๋ ์ดํฐ์ ์๋ '์ค์ ' ์ฑ์ ๋ค๋น๊ฒ์ด์ ์ธํฐํ์ด์ค์ ์์์ ๋๋ค. ์ฒซ ๋ฒ์งธ ํ๋ฉด์ ํ๊ฒฝ ์ค์ ์ ํฌํจํ๊ณ ์๋ ์ฑ์ ๋ฆฌ์คํธ๋ฅผ ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ค๋๋ค. ์ฑ์ ์ ํํ๋ฉด ๊ทธ ์ฑ์ ๋ํ ๊ฐ๋ณ์ ์ธ ์ค์ ๊ณผ ๊ทธ๋ฃน ์ค์ ์ด ๋๋ฌ๋ฉ๋๋ค. ๊ทธ๋ฃน์ ์ ํํ๋ฉด ๋ ๋ง์ ์ค์ ๋ค์ด ๋ํ๋๋ฉฐ ์ด๋ฐ ์์ผ๋ก ๋ฐ๋ณต๋ฉ๋๋ค. root view๋ฅผ ์ ์ธํ ๋ชจ๋ ๋ทฐ์ ๋ํด์๋, ์ฌ์ฉ์๊ฐ ์์์ ๊ณ์ธต์ผ๋ก ๋๋์๊ฐ ์ ์๋๋ก navigation controller๊ฐ back ๋ฒํผ์ ์ ๊ณตํฉ๋๋ค.
๊ทธ๋ฆผ1 : ๋ด๋น๊ฒ์ด์ ์ธํฐํ์ด์ค์ ์์
navigation controller ๊ฐ์ฒด๋ navigation stack์ด๋ผ๊ณ ์๋ ค์ง, ์์๊ฐ ์๋ ๋ฐฐ์ด์ ์ฌ์ฉํด ๊ทธ๊ฒ์ ์์ ๋ทฐ ์ปจํธ๋กค๋ฌ๋ค์ ๊ด๋ฆฌํฉ๋๋ค. ๋ฐฐ์ด์ ์ฒซ ๋ฒ์งธ ๋ทฐ ์ปจํธ๋กค๋ฌ๊ฐ root view controller์ด๋ฉฐ, stack์ ๋ฐ๋ฅ์ ๋ํ๋ ๋๋ค. ๋ฐฐ์ด์ ๋ง์ง๋ง ๋ทฐ ์ปจํธ๋กค๋ฌ๋ stack์ ์ต์์ ์์์ด๋ฉฐ, ํ์ฌ ๋ณด์ฌ์ง๊ณ ์๋ ๋ทฐ ์ปจํธ๋กค๋ฌ๋ฅผ ๋ํ๋ ๋๋ค. segue๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ UINavigationController ํด๋์ค์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํด ๋ทฐ ์ปจํธ๋กค๋ฌ๋ค์ stack์ ์ถ๊ฐํ๊ฑฐ๋ ์ญ์ ํ ์ ์์ต๋๋ค. ์ฌ์ฉ์๋ ๋ํ ๋ด๋น๊ฒ์ด์ ๋ฐ์ back ๋ฒํผ์ ์ฌ์ฉํ๊ฑฐ๋, left-edge ์ค์์ดํ ์ ์ค์ฒ๋ฅผ ์ฌ์ฉํด ์ต์์ ๋ทฐ ์ปจํธ๋กค๋ฌ๋ฅผ ์ญ์ ํ ์ ์์ต๋๋ค.
navigation controller๋ ์ธํฐํ์ด์ค ์๋จ์ navigation bar์ ์ธํฐํ์ด์ค ํ๋จ์ ์ ํ์ ์ธ toolbar๋ฅผ ๊ด๋ฆฌํฉ๋๋ค. navigation bar๋ ํญ์ ๋ณด์ฌ์ง๋ฉฐ navigation controller์ ์ํด ๊ด๋ฆฌ๋๋ฉฐ, navigation controller๋ ์์ ๋ทฐ ์ปจํธ๋กค๋ฌ๋ก๋ถํฐ ์ ๊ณต๋๋ ์ปจํ
์ธ ๋ก navigation bar๋ฅผ ์
๋ฐ์ดํธํฉ๋๋ค. ๋น์ทํ๊ฒ, isToolBarHidden
ํ๋กํผํฐ๊ฐ false์ด๋ฉด, navigation controller๋ ์ต์์ ๋ทฐ ์ปจํธ๋กค๋ฌ๊ฐ ์ ๊ณตํ๋ ์ปจํ
์ธ ๋ก toolbar๋ฅผ ์
๋ฐ์ดํธํฉ๋๋ค.
navigation controller๋ ์์ ์ ๋์์ delegate ๊ฐ์ฒด๋ก ์กฐ์ ํฉ๋๋ค. delegate๊ฐ์ฒด๋ ๋ทฐ ์ปจํธ๋กค๋ฌ๋ค์ push ๋๋ pop์ overrideํ๊ฑฐ๋, ์ปค์คํ
์ ๋๋ฉ์ด์
์ ํ์ ์ ๊ณตํ๊ฑฐ๋, ๋ด๋น๊ฒ์ด์
์ธํฐํ์ด์ค์ ๋ํ ๊ธฐ๋ณธ ๋ฐฉํฅ์ ๋ช
์ํ ์ ์์ต๋๋ค. ๋น์ ์ด ์ ๊ณตํ๋ delegate ๊ฐ์ฒด๋ ๋ฐ๋์ UINavigationControllerDelegate
ํ๋กํ ์ฝ์ ๋ฐ๋ผ์ผ ํฉ๋๋ค.
๊ทธ๋ฆผ2๋ navigation controller์ ๊ทธ๊ฒ์ด ๊ด๋ฆฌํ๋ ๊ฐ์ฒด๋ค์ ๊ด๊ณ๋ฅผ ๋ณด์ฌ์ค๋๋ค. ์ด ๊ฐ์ฒด๋ค์ ์ ๊ทผํ๊ธฐ ์ํด์๋ navigation controller์ ๋ช ์๋ ํ๋กํผํฐ๋ค์ ์ฌ์ฉํ์ญ์์ค.
๊ทธ๋ฆผ2 : navigation controller์ ์ํด ๊ด๋ฆฌ๋๋ ๊ฐ์ฒด๋ค
Navigation Controller ๋ทฐ
navigation controller๋ ์ปจํ
์ด๋ ๋ทฐ ์ปจํธ๋กค๋ฌ์
๋๋ค - ์ด ๋ง์, ์์ ๋ด๋ถ์ ๋ค๋ฅธ ๋ทฐ ์ปจํธ๋กค๋ฌ๋ค์ ์ปจํ
์ธ ๋ฅผ ํฌํจํ๊ณ ์๋ค๋ ๋ง์
๋๋ค. navigation controller์ ๋ทฐ์๋ view
ํ๋กํผํฐ๋ก ์ ๊ทผํ ์ ์์ต๋๋ค. ์ด ๋ทฐ๋ navigation bar, ์ ํ์ ์ธ toolbar, ๊ทธ๋ฆฌ๊ณ ์ต์์ ๋ทฐ ์ปจํธ๋กค๋ฌ์ ์์ํ๋ content view๋ฅผ ํฌํจํฉ๋๋ค. ๊ทธ๋ฆผ3์ ์ด ๋ทฐ๋ค์ด ์ ์ฒด์ ์ธ ๋ด๋น๊ฒ์ด์
์ธํฐํ์ด์ค๋ฅผ ๋ณด์ฌ์ฃผ๊ธฐ ์ํด ์ด๋ป๊ฒ ์กฐ๋ฆฝ๋๋์ง๋ฅผ ๋ณด์ฌ์ค๋๋ค. (์ด ๊ทธ๋ฆผ์์, ๋ด๋น๊ฒ์ด์
์ธํฐํ์ด์ค๋ ํญ ๋ฐ ์ธํฐํ์ด์ค ๋ด๋ถ์ ์ถ๊ฐ๋ก ํฌํจ๋์ด ์์ต๋๋ค.) navigation bar์ ์ปจํ
์ธ ์ toolbar์ ๋ทฐ๊ฐ ๋ฐ๋๋๋ผ๋, ๋ทฐ ์์ฒด๋ ๋ฐ๋์ง ์์ต๋๋ค. ์ค์ ๋ก ๋ฐ๋๋ ๋ทฐ๋, navigation stack์ ์ต์์ ๋ทฐ ์ปจํธ๋กค๋ฌ๊ฐ ์ ๊ณตํ๋ ์ปค์คํ
์ปจํ
์ธ ๋ทฐ ๋ฟ์
๋๋ค.
๊ทธ๋ฆผ3 : navigation controller์ ๋ทฐ๋ค
๋ ธํธ
iOS7 ์ดํ ๋ฒ์ ๋ถํฐ, ์ปจํ ์ธ ๋ทฐ๋ ๋ด๋น๊ฒ์ด์ ๋ฐ ์๋์ ๊ฒน์ณ์ง๋๋ค. ๋ฐ๋ผ์ ๋ทฐ ์ปจํธ๋กค๋ฌ ์ปจํ ์ธ ๋ฅผ ๋์์ธํ ๋ ๊ฒน์ณ์ง๋ ๊ณต๊ฐ์ ๋ฐ๋์ ๊ณ ๋ คํด์ผ ํฉ๋๋ค.
๋ด๋น๊ฒ์ด์
์ปจํธ๋กค๋ฌ๋ navigation bar์ ์ ํ์ ์ธ ๋ด๋น๊ฒ์ด์
ํด๋ฐ์ ์์ฑ, ๊ตฌ์ฑ, ํ์๋ฅผ ๊ด๋ฆฌํฉ๋๋ค. navigation bar์ ์ธํ๊ณผ ์ฐ๊ด๋ ํ๋กํผํฐ๋ฅผ ์ปค์คํ
ํ๋ ๊ฒ์ ํ์ฉ๋๋, ์ ๋๋ก navigation bar์ frame, bounds, alpha๊ฐ์ ์ง์ ์ ์ผ๋ก ๋ฐ๊ฟ์๋ ์ ๋ฉ๋๋ค. ๋ง์ฝ UINavigationBar๋ฅผ ์์ํ๋ฉด, init(navigationBarClass:toolbarClass:)
๋ฉ์๋๋ฅผ ์ฌ์ฉํด ๋ฐ๋์ ๋ด๋น๊ฒ์ด์
์ปจํธ๋กค๋ฌ๋ฅผ ์ด๊ธฐํํด์ผ ํฉ๋๋ค. navigation bar๋ฅผ ์จ๊ธฐ๊ฑฐ๋ ๋ณด์ฌ์ฃผ๊ธฐ ์ํด์๋, isNavigationBarHidden
ํ๋กํผํฐ๋ setNavigationBarHidden(_:animated:)
๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ญ์์ค.
๋ด๋น๊ฒ์ด์ ์ปจํธ๋กค๋ฌ๋ ๋ด๋น๊ฒ์ด์ ์คํ์ ์๋ ๋ทฐ ์ปจํธ๋กค๋ฌ์ ์ฐ๊ด๋ navigation item ๊ฐ์ฒด(์ฆ, UINavigationItem ํด๋์ค์ ์ธ์คํด์ค๋ค)๋ฅผ ์ฌ์ฉํด navigation bar์ ๋ด์ฉ์ ๋์ ์ผ๋ก ๋น๋ํฉ๋๋ค. navigation bar์ ์ ์ฒด์ ์ธ ์ธํ์ ์ปค์คํ ํ๋ ค๋ฉด, UIAppearance API๋ฅผ ์ฌ์ฉํ์ญ์์ค. navigation bar์ ๋ด์ฉ์ ๋ณ๊ฒฝํ๋ ค๋ฉด, ์ปค์คํ ๋ทฐ ์ปจํธ๋กค๋ฌ์ navigation item์ ๊ตฌ์ฑํด์ผ ํฉ๋๋ค.
navigation bar์ ๋ํ ๋ ๋ง์ ์ ๋ณด๋ฅผ ๋ณด๋ ค๋ฉด UINavigationBar๋ฅผ ์ฐธ๊ณ ํ์ญ์์ค. bar button item์ ์ด๋ป๊ฒ ๋ง๋๋์ง์ ๋ํ ๋ ๋ง์ ์ ๋ณด๋ฅผ ๋ณด๋ ค๋ฉด UINavigationItem์ ์ฐธ๊ณ ํ์ญ์์ค.
Navigation Bar ์ ๋ฐ์ดํธํ๊ธฐ
์ต์์ ๋ทฐ ์ปจํธ๋กค๋ฌ๊ฐ ๋ฐ๋ ๋๋ง๋ค, ๋ด๋น๊ฒ์ด์ ์ปจํธ๋กค๋ฌ๋ ๊ทธ์ ๋ฐ๋ผ navigation bar๋ฅผ ์ ๋ฐ์ดํธํฉ๋๋ค. ๊ตฌ์ฒด์ ์ผ๋ก๋, ๋ด๋น๊ฒ์ด์ ์ปจํธ๋กค๋ฌ๋ navigation bar์ ์ธ ์์ญ: ์ผ์ชฝ, ์ค์, ์ค๋ฅธ์ชฝ ๊ฐ๊ฐ์ ํ์๋๋ bar button items๋ฅผ ์ ๋ฐ์ดํธํฉ๋๋ค. bar button item์ UIBarButtonItemํด๋์ค์ ์ธ์คํด์ค์ ๋๋ค. ๋น์ ์ ํ์์ ๋ฐ๋ผ ์ปค์คํ ์ปจํ ์ธ ๋ก item์ ๋ง๋ค๊ฑฐ๋, ํ์ค ์์คํ ์์ดํ ์ ๋ง๋ค ์ ์์ต๋๋ค.
navigation bar์ ์์ ์ ํ๋ ๊ฒ์ navigation bar ์์ ์ ํ๋กํผํฐ์ ์ํด ๊ด๋ฆฌ๋ฉ๋๋ค. navigation bar์ item์ ์์ ๋ฐ๊พธ๊ธฐ ์ํด์๋ tintColor
ํ๋กํผํฐ๋ฅผ ์ฌ์ฉํ๊ณ , navigation bar ์์ฒด์ ์์ ๋ฐ๊พธ๊ธฐ ์ํด์๋ barTintColor
ํ๋กํผํฐ๋ฅผ ์ฌ์ฉํ์ญ์์ค. navigation bar๋ ํ์ฌ ๋ณด์ฌ์ง๊ณ ์๋ ๋ทฐ ์ปจํธ๋กค๋ฌ๋ก๋ถํฐ ์์์ ์์ํ์ง ์์ต๋๋ค.
navigation bar์ ๋ํ ๋ ๋ง์ ์ ๋ณด๋ฅผ ์ํด์๋ UINavigationBar๋ฅผ ์ฐธ๊ณ ํ์ญ์์ค. bar button item์ ์ด๋ป๊ฒ ๋ง๋๋์ง์ ๋ํ ๋ ๋ง์ ์ ๋ณด๋ฅผ ๋ณด๋ ค๋ฉด UIBarButtonItem ์ ์ฐธ๊ณ ํ์ญ์์ค.
์ผ์ชฝ item
๋ด๋น๊ฒ์ด์ ์คํ์์ ๋ฃจํธ ๋ทฐ ์ปจํธ๋กค๋ฌ๋ง ์ ์ธํ๊ณ , navigation bar์ ์ผ์ชฝ item์ ์ด์ ๋ทฐ ์ปจํธ๋กค๋ฌ๋ก ๋๋์๊ฐ ์ ์๋๋ก ํด์ค๋๋ค(๋ค๋ก ๊ฐ๊ธฐ ๋ฒํผ). ๋งจ ์ผ์ชฝ์ ์์นํ๋ ๋ฒํผ(left-most button)์ ๋ค์๊ณผ ๊ฐ์ด ๊ฒฐ์ ๋ฉ๋๋ค:
- ์ต์์ ๋ทฐ ์ปจํธ๋กค๋ฌ๊ฐ custom left bar button item์ ๊ฐ์ง๊ณ ์๋ค๋ฉด, ๊ทธ item์ด ํ์๋ฉ๋๋ค. custom left bar button item๋ฅผ ์ง์ ํ๊ธฐ ์ํด์๋, ๋ทฐ์ปจํธ๋กค๋ฌ์ navigtaion item์ผ๋ก
leftBarButtonItem
ํ๋กํผํฐ๋ฅผ ์ค์ ํ์ญ์์ค. - ์ต์์ ๋ทฐ ์ปจํธ๋กค๋ฌ๊ฐ custom left bar button item์ ๊ฐ์ง๊ณ ์์ง ์์ง๋ง, ์ด์ ๋ทฐ ์ปจํธ๋กค๋ฌ์ navigation item์
backBarButtonItem
ํ๋กํผํฐ๋ก ์ง์ ๋ ๊ฐ์ฒด๋ฅผ ๊ฐ์ง๊ณ ์๋ค๋ฉด, navigation bar์ ๊ทธ item์ด ํ์๋ฉ๋๋ค. - ๋ง์ฝ custom bar button์ด ์ต์์ ๋ทฐ ์ปจํธ๋กค๋ฌ์ ์ด์ ๋ทฐ ์ปจํธ๋กค๋ฌ์ ๋ชจ๋ ์ง์ ๋์ด ์์ง ์๋ค๋ฉด, ๊ธฐ๋ณธ ๋ค๋ก๊ฐ๊ธฐ ๋ฒํผ์ด ์ฌ์ฉ๋๋ฉฐ, ๋ค๋ก๊ฐ๊ธฐ ๋ฒํผ์ title์ ์ด์ ๋ทฐ ์ปจํธ๋กค๋ฌ์ titleํ๋กํผํฐ์ ๊ฐ์ผ๋ก ์ค์ ๋ฉ๋๋ค - ์คํ ์์์ ํ ์ธต ์๋์ ๋ทฐ ์ปจํธ๋กค๋ฌ๋ฅผ ๋งํฉ๋๋ค. (๋ง์ฝ ๋ด๋น๊ฒ์ด์ ์คํ์ ๋จ ํ๋์ ๋ทฐ ์ปจํธ๋กค๋ฌ๋ง์ด ์กด์ฌํ๋ค๋ฉด, ๋ค๋ก๊ฐ๊ธฐ ๋ฒํผ์ด ํ์๋์ง ์์ต๋๋ค.)
๋ ธํธ
๋ค๋ก ๊ฐ๊ธฐ ๋ฒํผ์ title์ด ๊ฐ์ฉ์์ญ์ ๋นํด ๋๋ฌด ๊ธด ๊ฒฝ์ฐ, navigation bar๊ฐ ์ค์ ๋ฒํผ title ๋์ “Back”์ด๋ผ๋ ๋ฌธ์์ด์ ์ฌ์ฉํ ์ ์์ต๋๋ค. navigation bar๋ ๋ค๋ก๊ฐ๊ธฐ ๋ฒํผ์ด ์ด์ ๋ทฐ ์ปจํธ๋กค๋ฌ์ ์ํด ์ ๊ณต๋ ๋๋ง ์ด๋ ๊ฒ ํฉ๋๋ค. ๋ง์ฝ ์ ์ต์์ ๋ทฐ ์ปจํธ๋กค๋ฌ๊ฐ custom left bar button item(๊ทธ ๋ทฐ ์ปจํธ๋กค๋ฌ์ navigation item์ leftBarButtonItem ๋๋ leftBarButtonItems ํ๋กํผํฐ๋ก ์ง์ ๋ ๊ฐ์ฒด)์ ๊ฐ๋ ๊ฒฝ์ฐ, navigation bar๋ ๋ฒํผ์ title์ ๋ฐ๊พธ์ง ์์ต๋๋ค.
์ค์ item
๋ด๋น๊ฒ์ด์ ์ปจํธ๋กค๋ฌ๋ navigation bar์ ์ค์์ ๋ค์๊ณผ ๊ฐ์ด ์ ๋ฐ์ดํธํฉ๋๋ค:
- ์ ์ต์์ ๋ทฐ ์ปจํธ๋กค๋ฌ๊ฐ custom title view๋ฅผ ๊ฐ๋๋ค๋ฉด, navigation bar๋ ๊ธฐ๋ณธ title view ์๋ฆฌ์ ๊ทธ ๋ทฐ๋ฅผ ํ์ํฉ๋๋ค.
- custom title view๊ฐ ์ค์ ๋์ด ์์ง ์๋ค๋ฉด, navigation bar๋ ๋ทฐ ์ปจํธ๋กค๋ฌ์ ๊ธฐ๋ณธ title๋ฅผ ๋ด์ label์ ํ์ํฉ๋๋ค. ์ด label์ ๋ฌธ์์ด์ ์ผ๋ฐ์ ์ผ๋ก ๋ทฐ ์ปจํธ๋กค๋ฌ์
title
ํ๋กํผํฐ์ ํฌํจ๋ ๊ฐ์ด ๋ฉ๋๋ค. ๋ง์ฝ ๋ทฐ ์ปจํธ๋กค๋ฌ์ title์ด ์๋ ๋ค๋ฅธ title์ ํ์ํ๊ณ ์ถ๋ค๋ฉด, ๋ทฐ ์ปจํธ๋กค๋ฌ์ navigation item์title
ํ๋กํผํฐ๋ฅผ ๋์ ์ค์ ํ์ญ์์ค.
์ค๋ฅธ์ชฝ item
๋ด๋น๊ฒ์ด์ ์ปจํธ๋กค๋ฌ๋ navigation bar์ ์ค๋ฅธ์ชฝ ์์ญ์ ๋ค์๊ณผ ๊ฐ์ด ์ ๋ฐ์ดํธํฉ๋๋ค:
- ์ต์์ ๋ทฐ ์ปจํธ๋กค๋ฌ๊ฐ custom right bar button item์ ๊ฐ๋๋ค๋ฉด, ๊ทธ item์ด ํ์๋ฉ๋๋ค. custom right bar button item์ ์ง์ ํ๋ ค๋ฉด, ๋ทฐ ์ปจํธ๋กค๋ฌ์ navigation item์ผ๋ก
rightBarButtonItem
ํ๋กํผํฐ๋ฅผ ์ค์ ํ์ญ์์ค. - custom right bar button item์ด ์ง์ ๋์ด ์์ง ์๋ค๋ฉด, navigation bar๋ bar์ ์ค๋ฅธ์ชฝ ์์ญ์ ์๋ฌด๊ฒ๋ ํ์ํ์ง ์์ต๋๋ค.
Toolbar ํ์ํ๊ธฐ
๋ด๋น๊ฒ์ด์
์ปจํธ๋กค๋ฌ ๊ฐ์ฒด๋ ์ ํ์ ์ธ toolbar๋ฅผ ์์ ์ ๋ทฐ ๊ณ์ธต ์์์ ๊ด๋ฆฌํฉ๋๋ค. ํ์๋ ๋, toolbar๋ ์ ํจํ ๋ทฐ์ปจํธ๋กค๋ฌ์ toolbarItems
ํ๋กํผํฐ๋ก๋ถํฐ ์์ ์ ํ์ฌ ์์๋ค์ ๊ฐ์ ธ์ต๋๋ค. ์ ํจํ ๋ทฐ์ปจํธ๋กค๋ฌ๊ฐ ๋ฐ๋๋ฉด, ๋ด๋น๊ฒ์ด์
์ปจํธ๋กค๋ฌ๋ toolbar item๋ค์ ์๋ก์ด ๋ทฐ์ปจํธ๋กค๋ฌ์ ๋ง๊ฒ ์์ ํ๋ฉฐ, ์ ์ ํ ๊ฒฝ์ฐ์ ์ ์์๋ค์ด ๊ทธ ์์น๋ก ๋ฑ์ฅํ ๋ ์ ๋๋ฉ์ด์
ํจ๊ณผ๋ฅผ ์ค๋๋ค.
๋ด๋น๊ฒ์ด์
toolbar๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์จ๊ฒจ์ ธ ์์ผ๋, ๋ด๋น๊ฒ์ด์
์ปจํธ๋กค๋ฌ ๊ฐ์ฒด์ setToolbarHidden(_:animated:)
๋ฉ์๋๋ฅผ ํธ์ถํด ๋ด๋น๊ฒ์ด์
์ธํฐํ์ด์ค์ toolbar๋ฅผ ํ์ํ ์ ์์ต๋๋ค. ๋ชจ๋ ๋ทฐ์ปจํธ๋กค๋ฌ๊ฐ toolbar item์ ์ง์ํ์ง๋ ์๋๋ค๋ฉด, delegate ๊ฐ์ฒด๊ฐ ํ์ push ๋๋ pop ์ฐ์ฐ์ ํ ๋ toolbar์ ํ์ ์ฌ๋ถ๋ฅผ ์ ํํ๋๋ก ์ด ๋ฉ์๋๋ฅผ ํธ์ถํ๊ฒ ํ ์ ์์ต๋๋ค. custom UIToolbar ํ์ ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด, init(navigationBarClass:toolbarClass:)
๋ฅผ ์ฌ์ฉํด ๋ด๋น๊ฒ์ด์
์ปจํธ๋กค๋ฌ๋ฅผ ์ด๊ธฐํํ์ญ์์ค. ๋ง์ฝ custom tooolbar์ navigation bar์ ํ์ ํด๋์ค๋ฅผ ์ฌ์ฉํด ๋ด๋น๊ฒ์ด์
์ปจํธ๋กค๋ฌ๋ฅผ ๋ง๋ ๋ค๋ฉด, ๋ด๋น๊ฒ์ด์
์ปจํธ๋กค๋ฌ๋ฅผ ํ๋ฉด์ ํ์ํ๊ธฐ ์ ์ ๋ทฐ์ปจํธ๋กค๋ฌ๋ฅผ pushํ๊ณ ์ค์ ํ๋ ์์
์ ์ง์ ํด์ผ ํ๋ค๋ ๊ฒ์ ๊ธฐ์ตํ์ญ์์ค.
๋ค๋ฅธ ํ๊ฒฝ์ ์ ์ฉํ๊ธฐ
๋ด๋น๊ฒ์ด์ ์ธํฐํ์ด์ค๋ ์์ถ๋ ์ํ(horizontally compact)ํ๊ฒฝ๊ณผ ์ผ๋ฐ์ ์ธ ์ํ(horizontally regular)ํ๊ฒฝ ๋ชจ๋์ ๋์ผํ๊ฒ ์ ์ฉ๋ฉ๋๋ค. ๋ ํ๊ฒฝ์ ์ ํํ ๋๋ ๋ด๋น๊ฒ์ด์ ์ปจํธ๋กค๋ฌ์ ๋ทฐ์ ํฌ๊ธฐ๋ง์ด ๋ฐ๋๋๋ค. ๋ด๋น๊ฒ์ด์ ์ปจํธ๋กค๋ฌ๊ฐ ๋ทฐ ๊ณ์ธต์ด๋ ๋ทฐ์ ๋ ์ด์์์ ๋ฐ๊พธ์ง๋ ์์ต๋๋ค.
๋ด๋น๊ฒ์ด์ ์คํ์ ๋ทฐ ์ปจํธ๋กค๋ฌ๋ค ์ฌ์ด์ segue๋ฅผ ๊ตฌ์ฑํ ๋, ์ผ๋ฐ์ ์ธ Show segue์ Show Detail segue๋ ๋ค์๊ณผ ๊ฐ์ด ๋์ํฉ๋๋ค:
- Show segue
- ๋ด๋น๊ฒ์ด์ ์ปจํธ๋กค๋ฌ๊ฐ ์์ ์ ๋ด๋น๊ฒ์ด์ ์คํ์ ์ง์ ๋ ๋ทฐ ์ปจํธ๋กค๋ฌ๋ฅผ pushํฉ๋๋ค.
- Show Detail segue
- ๋ด๋น๊ฒ์ด์ ์ปจํธ๋กค๋ฌ๊ฐ ์ง์ ๋ ๋ทฐ ์ปจํธ๋กค๋ฌ๋ฅผ modal๋ก ๋ณด์ฌ์ค๋๋ค.
๋ค๋ฅธ ํ์ ์ segue๋ค์ ๋์์ ๋ณํ์ง ์์ต๋๋ค.
์ธํฐํ์ด์ค ๋์
๋ด๋น๊ฒ์ด์ ์ปจํธ๋กค๋ฌ๋ ์์ ์ ์ธํฐํ์ด์ค์ ๋ํด ์๋์ ๊ฐ์ ๋์์ ์ง์ํฉ๋๋ค:
- ์ง์๋๋ ์ธํฐํ์ด์ค ๋ฐฉํฅ (supported interface orientations)
- ๋ด๋น๊ฒ์ด์
์ปจํธ๋กค๋ฌ ๊ฐ์ฒด๋ ์ง์๋๋ ์ธํฐํ์ด์ค ๋ฐฉํฅ์ ๊ฒฐ์ ํ ๋ ๋ด๋น๊ฒ์ด์
์คํ์ ์๋ ๋ทฐ ์ปจํธ๋กค๋ฌ๋ค์ ์ฐพ์ง ์์ต๋๋ค. ์์ดํฐ์์, ๋ด๋น๊ฒ์ด์
์ปจํธ๋กค๋ฌ๋ ๊ฑฐ๊พธ๋ก ๋ ์ธ๋ก ๋ฐฉํฅ๋ง ๋นผ๊ณ ๋ชจ๋ ๋ฐฉํฅ์ ์ง์ํฉ๋๋ค. ์์ดํจ๋์์, ๋ด๋น๊ฒ์ด์
์ปจํธ๋กค๋ฌ๋ ๋ชจ๋ ๋ฐฉํฅ์ ์ง์ํฉ๋๋ค. ๋ง์ฝ ๋ด๋น๊ฒ์ด์
์ปจํธ๋กค๋ฌ๊ฐ delegate๊ฐ์ฒด๊ฐ ์๋ค๋ฉด, ๊ทธ delegate์์
navigationControllerSupportedInterfaceOrientations(_:)
๋ฉ์๋๋ฅผ ์ฌ์ฉํด ์๋ก ๋ค๋ฅธ ์ง์๋๋ ๋ฐฉํฅ์ ์งํฉ์ ์ง์ ํ ์ ์์ต๋๋ค.
- ๋ด๋น๊ฒ์ด์
์ปจํธ๋กค๋ฌ ๊ฐ์ฒด๋ ์ง์๋๋ ์ธํฐํ์ด์ค ๋ฐฉํฅ์ ๊ฒฐ์ ํ ๋ ๋ด๋น๊ฒ์ด์
์คํ์ ์๋ ๋ทฐ ์ปจํธ๋กค๋ฌ๋ค์ ์ฐพ์ง ์์ต๋๋ค. ์์ดํฐ์์, ๋ด๋น๊ฒ์ด์
์ปจํธ๋กค๋ฌ๋ ๊ฑฐ๊พธ๋ก ๋ ์ธ๋ก ๋ฐฉํฅ๋ง ๋นผ๊ณ ๋ชจ๋ ๋ฐฉํฅ์ ์ง์ํฉ๋๋ค. ์์ดํจ๋์์, ๋ด๋น๊ฒ์ด์
์ปจํธ๋กค๋ฌ๋ ๋ชจ๋ ๋ฐฉํฅ์ ์ง์ํฉ๋๋ค. ๋ง์ฝ ๋ด๋น๊ฒ์ด์
์ปจํธ๋กค๋ฌ๊ฐ delegate๊ฐ์ฒด๊ฐ ์๋ค๋ฉด, ๊ทธ delegate์์
- ํ์ ๋ฌธ๋งฅ (presentation context)
- ๋ด๋น๊ฒ์ด์
์ปจํธ๋กค๋ฌ๋ modal๋ก ํ์๋๋ ๋ทฐ ์ปจํธ๋กค๋ฌ์ ๋ํ ํ์ ๋ฌธ๋งฅ์ ์ ์ํฉ๋๋ค. modal ์ ํ ์คํ์ผ์ด
UIModalPresentationStyle.currentContext
์ด๊ฑฐ๋UIModalPresentationStyle.overCurrentContext
์ด๋ผ๋ฉด, ๋ด๋น๊ฒ์ด์ ์คํ์ ๋ทฐ ์ปจํธ๋กค๋ฌ๋ถํฐ์ modal ํ์๋ ์ ์ฒด ๋ด๋น๊ฒ์ด์ ์ธํฐํ์ด์ค๋ฅผ ๋ฎ๊ฒ ๋ฉ๋๋ค.
- ๋ด๋น๊ฒ์ด์
์ปจํธ๋กค๋ฌ๋ modal๋ก ํ์๋๋ ๋ทฐ ์ปจํธ๋กค๋ฌ์ ๋ํ ํ์ ๋ฌธ๋งฅ์ ์ ์ํฉ๋๋ค. modal ์ ํ ์คํ์ผ์ด
์ํ ๋ณด์กด
๋ด๋น๊ฒ์ด์
์ปจํธ๋กค๋ฌ์ restorationIdentifier
ํ๋กํผํฐ์ ๊ฐ์ ํ ๋นํ๋ฉด, ๊ทธ๊ฒ์ ๋ด๋น๊ฒ์ด์
์คํ์ ์๋ ์๊ธฐ ์์ ๊ณผ ์์ ๋ทฐ ์ปจํธ๋กค๋ฌ๋ค์ ๋ณด์กดํ๋ ค๊ณ ํฉ๋๋ค. ๋ด๋น๊ฒ์ด์
์ปจํธ๋กค๋ฌ๋ ์คํ์ ๋งจ ์๋์์ ์์ํด ์์ชฝ์ผ๋ก ์ด๋ํ๋ฉฐ, ์ด๋ ์ ํจํ ๋ณต์ ์๋ณ์ ๋ฌธ์์ด์ ๊ฐ์ง ๋ทฐ ์ปจํธ๋กค๋ฌ ๊ฐ๊ฐ์ ์ธ์ฝ๋ฉํฉ๋๋ค. ๋ค์ ์คํ ์ฌ์ดํด ๋์, ๋ด๋น๊ฒ์ด์
์ปจํธ๋กค๋ฌ๋ ๋ณด์กด๋ ๋ทฐ ์ปจํธ๋กค๋ฌ๋ค์ ๋ณด์กด๋ ์์์ ๊ฐ์ ์์๋ก ๋ด๋น๊ฒ์ด์
์คํ์ ๋ณต์ํฉ๋๋ค.
๋ด๋น๊ฒ์ด์ ์คํ์ pushํ ์์ ๋ทฐ ์ปจํธ๋กค๋ฌ๋ค์ ๊ฐ์ ๋ณต์ ์๋ณ์๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ด๋น๊ฒ์ด์ ์ปจํธ๋กค๋ฌ๋ ์๋์ผ๋ก ์ถ๊ฐ์ ์ธ ์ ๋ณด๋ฅผ ์ ์ฅํด, ๊ฐ ์์ ๋ทฐ ์ปจํธ๋กค๋ฌ๋ค์ ๋ณต์ ๊ฒฝ๋ก๊ฐ ์ ์ผํ๋๋ก ๋ณด์ฅํฉ๋๋ค.
์ํ ๋ณด์กด๊ณผ ๋ณต์์ด ์ด๋ป๊ฒ ๋์ํ๋์ง์ ๋ํ ์์ธํ ์ ๋ณด๋ฅผ ์ํด์๋, Preserving your app’s UI across launches ๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
'๐ฑ๐ iOS > ๐ Apple Developer Documentation' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift / Array] swapAt(_:_:) (0) | 2022.09.28 |
---|---|
[Swift / Array] enumerated() - ๋ฐฐ์ด์ ์ด๊ฑฐํ๋ ์ํ์ค ๋ง๋ค๊ธฐ (1) | 2022.09.23 |
About the App Launch Sequence ์ฑ ์คํ ์ํ์ค์ ๋ํ์ฌ (0) | 2022.08.27 |
Dictionary - subscript(_: default:) (0) | 2022.08.25 |
[Swift] .zip(_:_:) : ๋ ์ํ์ค ํฉ์น๊ธฐ (0) | 2022.06.21 |