{"id":150,"date":"2025-10-09T09:06:28","date_gmt":"2025-10-09T00:06:28","guid":{"rendered":"https:\/\/devserver.kr\/blog\/?p=150"},"modified":"2025-10-09T09:06:28","modified_gmt":"2025-10-09T00:06:28","slug":"ios-uinavigationcontroller","status":"publish","type":"post","link":"https:\/\/devserver.kr\/blog\/ios\/ios-uinavigationcontroller\/","title":{"rendered":"iOS UINavigationController"},"content":{"rendered":"\n<div class=\"wp-block-jetpack-markdown\"><h1>UINavigationController<\/h1>\n<p>Embed in \uc73c\ub85c navigation controller \ub97c VC\uc5d0 \ubd99\uc774\uba74 \uc790\ub3d9\uc73c\ub85c NavigationBar \uac00 \ubd99\ub294\ub2e4. \uc774 \ub54c \uc870\uc791\ubc29\ubc95<\/p>\n<h2>\uae30\ubcf8 \uc0ac\uc6a9\ubc95<\/h2>\n<p>\/\/ Push View Controller Onto Navigation Stack\nnavigationController.pushViewController(viewController, animated: true)<\/p>\n<p>\/\/ Pop View Controller From Navigation Stack\nnavigationController.popViewController(animated: true)<\/p>\n<h2>root view controller \uad6c\ud558\uae30<\/h2>\n<pre><code class=\"language-swift\">\/\/ Access View Controllers of Navigation Controller\nnavigationController.viewControllers\n\n\/\/ Access Root View Controller of Navigation Controller\nnavigationController.viewControllers.first\n\n<\/code><\/pre>\n<h3>NavigationBar \uac10\ucd94\uae30<\/h3>\n<pre><code class=\"language-swift\">navigationController?.isNavigationBarHidden = true\n\/\/ or\nnavigationController.setNavigationBarHidden(false, animated: true)\n\n<\/code><\/pre>\n<h3>UIViewController \uc804\ud658\ud558\uae30<\/h3>\n<pre><code class=\"language-swift\">let storyboard = UIStoryboard(name: &quot;Main&quot;, bundle: nil)\nlet vc = storyboard.instantiateViewController(withIdentifier: &quot;SB_PLAN&quot;) as! PlanVC\nself.navigationController?.pushViewController(vc, animated: true)\n<\/code><\/pre>\n<h3>pop gesture \ub9c9\uae30<\/h3>\n<pre><code class=\"language-swift\">\/\/ \uc544\ub798\uc758 \ucf54\ub4dc\ub97c \ud2b8\ub9ac\uac70\ud558\uba74 Pop \uc81c\uc2a4\ucc98\ub97c \ube44\ud65c\uc131\ud654\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4\nself.navigationController?.interactivePopGestureRecognizer?.isEnabled = false\n<\/code><\/pre>\n<h3>\uc790\ub3d9\uc73c\ub85c \ubd99\ub294 &lt; \ubc31 \ubc84\ud2bc color<\/h3>\n<pre><code class=\"language-swift\">self.navigationController?.navigationBar.tintColor = .systemPink\n<\/code><\/pre>\n<p>\ubc31 \ubc84\ud2bc \uae00\uc790 \u201c\ub4a4\ub85c\u201d \uac10\ucd94\uae30\n\/\/ \u201c\ub4a4\ub85c\u201d \uac10\ucd94\uae30 , \ub450\ubc88\uc9f8 VC\uc5d0\uc11c\nself.navigationController?.navigationBar.topItem?.title = \u201c\u201d\n\ub610\ub294\nself.navigationController?.navigationItem.backBarButtonItem<\/p>\n<p>\uc774\ub807\uac8c backBarButonItem\uc774\ub77c\ub294 \uc9c1\uad00\uc801\uc778 \ud504\ub85c\ud37c\ud2f0\uac00 \uc788\uac70\ub4e0\uc694.<\/p>\n<p>let backBarButtonItem = UIBarButtonItem(title: \u201cZedd\u201d, style: .plain, target: self, action: nil)<\/p>\n<p>self.navigationItem.backBarButtonItem = backBarButtonItem<\/p>\n<p>or\nlet backBarButtonItem = UIBarButtonItem(title: \u201c\u201d, style: .plain, target: self, action: nil)\nbackBarButtonItem.tintColor = .white\nself.navigationItem.backBarButtonItem = backBarButtonItem<\/p>\n<p>back \ubc84\ud2bc \uc790\uccb4 \uac10\ucd94\uae30\nself.navigationItem.setHidesBackButton(true, animated: false)<\/p>\n<p>\ud639\uc740 \ub300\uccb4\ud558\uae30\nlet bbiCancel = UIBarButtonItem(image: UIImage(named: \u201cicon_menu\u201d), style: .plain, target: self, action: #selector(bbiCancelTapped))\nbbiCancel.tintColor = UIColor(hexString: \u201c4C4E51\u201d)!<\/p>\n<p>let leftBarButtons: [UIBarButtonItem] = [bbiCancel]\nnavigationItem.leftBarButtonItems = leftBarButtons<\/p>\n<p>This code set\u2019s the navigation bar\u2019s back button as hidden.<\/p>\n<pre><code class=\"language-swift\">self.navigationController?.navigationItem.hidesBackButton = true\n<\/code><\/pre>\n<p>This code set\u2019s the navigation bar\u2019s back button as nil<\/p>\n<pre><code class=\"language-swift\">self.navigationItem.leftBarButtonItem = nil;\n<\/code><\/pre>\n<p>A combination of these to approaches would be a better solution and works even if you have set a custom navigation bar.<\/p>\n<p>self.navigationItem.leftBarButtonItem = nil\nself.navigationItem.hidesBackButton = true\nYou can also use<\/p>\n<p>override func viewDidLoad() {\nsuper.viewDidLoad()<\/p>\n<p>}<\/p>\n<h3>\ud0c0\uc774\ud2c0 \uc124\uc815<\/h3>\n<pre><code class=\"language-swift\">\/\/ ViewController \ud0c0\uc774\ud2c0\uc744 \uc9c0\uc815\ud558\uba74 NavBar \ud0c0\uc774\ud2c0\uc774 \uc790\ub3d9\uc73c\ub85c \ud45c\uc2dc\ub41c\ub2e4.\nself.title = &quot;Title&quot;\nor\nself.navigationItem.title = &quot;Title&quot;\n\/\/\nviewController.title = &quot;\uc774\uac83\uc774 \ubc14\ub85c \ud0c0\uc774\ud2c0\uc785\ub2c8\ub2e4&quot;\n<\/code><\/pre>\n<p>\ubc31\ubc84\ud2bc\uc5d0\ub3c4 \uc790\ub3d9\uc73c\ub85c \ubd99\ub294\ub2e4.\n\uc5c6\uc560\uac70\ub098,<\/p>\n<pre><code class=\"language-swift\">self.navigationController?.navigationBar.topItem?.title = &quot;&quot;\n<\/code><\/pre>\n<p>\ub2e4\uc74c \ubdf0\uc758 \ubc31 \ubc84\ud2bc \uc606\uc5d0 \ud45c\uc2dc\ub420 \uae00\uc790 \uc124\uc815<\/p>\n<pre><code class=\"language-swift\">self.navigationController?.navigationBar.topItem?.title = &quot;Din&quot;\n<\/code><\/pre>\n<h3>\uac00\uc6b4\ub370 \ud0c0\uc774\ud2c0 \uc124\uc815\ud558\ub294 \ubc29\ubc95<\/h3>\n<pre><code class=\"language-swift\">\/\/ titleView\ub85c \uc0ac\uc6a9\ud560 Label\uc744 \uc0dd\uc131\nlet label = UILabel(frame: customFrame)\nlabel.text = &quot;\uc774\uac83\uc744 \ud0c0\uc774\ud2c0\ub85c \uc0ac\uc6a9\ud569\ub2c8\ub2e4&quot;\n\/\/ viewController\uc758 titleView\ub97c \uc0dd\uc131\ud55c Label\ub85c \uc14b\uc5c5\nviewController.titleView = label\n<\/code><\/pre>\n<h3>bar button item<\/h3>\n<pre><code class=\"language-swift\">\/\/ RightBarButtons\uc5d0 \ucd94\uac00\ud560 UIBarButtonItem\uc744 \uc0dd\uc131\nlet customButton = UIBarButtonItem(customView: customView)\n\/\/ Container\uac00 \ub420 Array\ub97c \uc0dd\uc131 (\ud639\uc740 \uc9c1\uc811 \uc9c0\uc815\ud558\ub294 \ubc29\ubc95\ub3c4 \uc788\uc2b5\ub2c8\ub2e4)\nvar rightBarButtons: [UIBarButtonItem] = []\n\/\/ Array\uc5d0 \ubc84\ud2bc \uc544\uc774\ud15c\uc744 \ucd94\uac00\nrightBarButtons.append(customButton)\n\/\/ RightBarButtonItems \ubc30\uc5f4\uc744 \uc14b\uc5c5\nviewController.navigationItem.rightBarButtonItems = rightBarButtons\n\n\/\/LeftBarButtons\uc5d0 \ucd94\uac00\ud560 UIBarButtonItem\uc744 \uc0dd\uc131\nlet customButtonCopy = UIBarButtonItem(customView: customView)\n\/\/ Container\uac00 \ub420 Array\ub97c \uc0dd\uc131 (\ud639\uc740 \uc9c1\uc811 \uc9c0\uc815\ud558\ub294 \ubc29\ubc95\ub3c4 \uc788\uc2b5\ub2c8\ub2e4)\nvar leftBarButtons: [UIBarButtonItem] = []\n\/\/ Array\uc5d0 \ubc84\ud2bc \uc544\uc774\ud15c\uc744 \ucd94\uac00\nleftBarButtons.append(customButtonCopy)\n\/\/ LeftBarButtonItems \ubc30\uc5f4\uc744 \uc14b\uc5c5\nviewController.navigationItem.leftBarButtonItems = leftBarButtons\n<\/code><\/pre>\n<h3>root view \ub85c \ub3cc\uc544\uac00\uae30<\/h3>\n<pre><code class=\"language-swift\">self.navigationController?.popToRootViewController(animated: true)\n<\/code><\/pre>\n<h2>push \ub41c View \uc5d0\uc11c barbuttonitem<\/h2>\n<pre><code class=\"language-swift\">let bbiCancel = UIBarButtonItem(image: UIImage(named: &quot;add&quot;), style: .plain, target: self, action: #selector(SetAlarmVC.bbiAddTapped))\n\nlet bbi = UIBarButtonItem(title:&quot;\ub2ec\ub825&quot;, style: .plain, target: self, action: #selector(LBBITapped))\n        \nself.navigationItem.rightBarButtonItem = bbi\n\n\n@objc func LBBITapped(_ sender: UIButton?) {\n      print(&quot;\\(#function)&quot;)\n      \n      \n      \/\/self.navigationController?.popViewController(animated: true)\n    }\n\n<\/code><\/pre>\n<h2>\uc0c9\uc0c1 \uc124\uc815<\/h2>\n<p>TintColor : barbuttonitem \uc5d0 \uc788\ub294 \uae00\uc790\ub098 \uc774\ubbf8\uc9c0\uc758 \uc0c9\uc0c1 \uc124\uc815, \uc790\ub3d9\uc73c\ub85c \ubd99\ub294 &lt; Back \ubc84\ud2bc \uc0c9\uc0c1 \uc124\uc815, \uac00\uc6b4\ub370 \ud0c0\uc774\ud2c0\uc740 \uc548 \ubc14\ub010\ub2e4.<\/p>\n<pre><code class=\"language-swift\">navigationController?.navigationBar.tintColor = UIColor.green\nself.navigationController?.navigationBar.tintColor = .green\n\n<\/code><\/pre>\n<p>\ud0c0\uc774\ud2c0 \uc0c9\uc0c1 \uc124\uc815<\/p>\n<pre><code class=\"language-swift\">self.navigationController?.navigationBar.titleTextAttributes = [.foregroundColor: UIColor.green]\n<\/code><\/pre>\n<pre><code class=\"language-swift\">\/\/ \ub124\ube44\uac8c\uc774\uc158\ubc14\uc758 \ubc30\uacbd\uc0c9 \uc124\uc815\nself.navigationController?.navigationBar.barTintColor = .gray\n\/\/ \uae30\ubcf8 \ubc18\ud22c\uba85\uc778\ub370..\ubd88\ud22c\uba85\ud558\uac8c \ud558\ub824\uba74 \uc544\ub798\ucc98\ub7fc\nself.navigationController?.navigationBar.isTranslucent = false\n\n\n\/\/ backgroundColor \ub3c4 \uc788\ub294\ub370, statusbar \uc544\ub798\ubd80\ud130 \uc2dc\uc791\ub418\ub294 \uc0ac\uac01\ud615 \uc601\uc5ed\uc774 background \uc784, isTranslucent = true \ud558\uba74 \ubcf4\uc778\ub2e4.\nself.navigationController?.navigationBar.backgroundColor = .red\n\n\n<\/code><\/pre>\n<h2>\ud558\ub2e8 \uacbd\uacc4\uc120 \uc5c6\uc560\uae30<\/h2>\n<pre><code class=\"language-swift\">self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)\nself.navigationController?.navigationBar.shadowImage = UIImage()\n\/\/or\nself.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)\nself.navigationController?.navigationBar.clipsToBounds = true\n\/\/or\nself.navigationController?.navigationBar.shadowImage = UIImage()\nself.navigationController?.navigationBar.isTranslucent = false\n\/\/ \uc774 \ubc29\ubc95\uc740 \uc544\ub798 \ucc98\ub9ac\ub3c4 \ud574\uc918\uc57c\ud568\nnavigationBar\uc5d0 barTintColor\ub97c \ub530\ub85c \uc918\uc57c\ud568.\n\n\n\n\n\n\n\n<\/code><\/pre>\n<h2>View\uc5d0 Navigation Bar \ub97c \ubd99\uc5ec\uc11c \ucc98\ub9ac\ud560 \ub54c<\/h2>\n<pre><code class=\"language-swift\">@IBOutlet weak var NavBar: UINavigationBar!\n\nlet bbiSave = UIBarButtonItem(title: &quot;\ucd94\uac00&quot;, style: .plain, target: self, action: #selector(HomeVC.bbiAddItemTapped))\n    \nNavBar.topItem?.rightBarButtonItem = bbiSave\n\n\/\/ \uac00\uc6b4\ub370 \ud0c0\uc774\ud2c0 \uc124\uc815\nNavBar.topItem?.title = &quot;app_lock&quot;\n\n\/\/ \uc67c\ucabd\uc5d0 \ubd99\ub294 \ubc14\ubc84\ud2bc\uc544\uc774\ud15c \ud0c0\uc774\ud2c0 \uc124\uc815\nNavBar.topItem?.leftBarButtonItem?.title = &quot;Back&quot;\n\n\/\/ \uae00\uc790\uc0c9 \uc124\uc815\nNavBar.tintColor = UIColor.black\n\n\/\/ \ubc30\uacbd \ud22c\uba85\ud558\uac8c\nNavBar.isTranslucent = true\nNavBar.backgroundColor = UIColor(hexString: &quot;#626567&quot;)\nNavBar.barTintColor = UIColor.darkGray\n    \nNavBar.setBackgroundImage(UIImage(), for: .default)\n\nNavBar.shadowImage = UIImage()\n\n@objc func bbiAddItemTapped(_ sender:UIButton?) {\n    let p = Double.random(in: 0.0...1.0)\n    let pin = Double.random(in: 0.0...1.0)\n    let pout = Double.random(in: 0.0...1.0)\n    let name = &quot;name&quot; + String(addCount)\n    print(&quot; new name \\(name)&quot;)\n    \n}\n\n<\/code><\/pre>\n<h1>swipe back \ub9c9\uae30<\/h1>\n<pre><code class=\"language-swift\">self.navigationController?.navigationItem.backBarButtonItem?.isEnabled = false;\n<\/code><\/pre>\n<\/div>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[4,7],"tags":[],"class_list":["post-150","post","type-post","status-publish","format-standard","hentry","category-ios","category-swift"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/devserver.kr\/blog\/wp-json\/wp\/v2\/posts\/150","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devserver.kr\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devserver.kr\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devserver.kr\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/devserver.kr\/blog\/wp-json\/wp\/v2\/comments?post=150"}],"version-history":[{"count":1,"href":"https:\/\/devserver.kr\/blog\/wp-json\/wp\/v2\/posts\/150\/revisions"}],"predecessor-version":[{"id":151,"href":"https:\/\/devserver.kr\/blog\/wp-json\/wp\/v2\/posts\/150\/revisions\/151"}],"wp:attachment":[{"href":"https:\/\/devserver.kr\/blog\/wp-json\/wp\/v2\/media?parent=150"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devserver.kr\/blog\/wp-json\/wp\/v2\/categories?post=150"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devserver.kr\/blog\/wp-json\/wp\/v2\/tags?post=150"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}