1. 程式人生 > >[Xcode10 實際操作]三、檢視控制器-(5)使用UINavigationController檢視入棧和出棧

[Xcode10 實際操作]三、檢視控制器-(5)使用UINavigationController檢視入棧和出棧

本文將演示使用導航控制器的幾個跳轉方式

選擇編輯第二個檢視控制器檔案

  1 import UIKit
  2 //定義一個全域性變數,用來記錄當前顯示區域的檢視的編號
  3 var pageNum = 0
  4 
  5 class SecondSubViewController: UIViewController {
  6 
  7     override func viewDidLoad() {
  8         super.viewDidLoad()
  9 
 10         // Do any additional setup after loading the view.
11 //每當當前檢視控制器被建立依此,全域性變數即增加1 12 pageNum = pageNum + 1 13 //然後根據當前的全域性變數數值,設定檢視控制器的標題名稱 14 self.title = "Page\(pageNum)" 15 //設定檢視控制器的背景顏色為紫色 16 self.view.backgroundColor = UIColor.purple 17 18 //新增一個按鈕,當點選按鈕時,跳轉(Push)至下一頁面 19
let push = UIButton(frame: CGRect(x: 40, y: 120, width: 240, height: 40)) 20 //設定按鈕上的標題文字 21 push.setTitle("Push Page", for: UIControl.State()) 22 //設定按鈕的背景顏色為橙色 23 push.backgroundColor = UIColor.orange 24 //給按鈕繫結點選事件 25 push.addTarget(self, action: #selector(SecondSubViewController.pushPage), for
: UIControl.Event.touchUpInside) 26 //將按鈕新增到當前檢視控制器的根檢視 27 self.view.addSubview(push) 28 29 //再新增一個按鈕,當點選按鈕時 30 //從當前頁面返回(Pop)至上一級頁面 31 let pop = UIButton(frame: CGRect(x: 40, y: 180, width: 240, height: 40)) 32 //設定按鈕上的標題文字 33 pop.setTitle("Pop Page", for: UIControl.State()) 34 //設定按鈕的背景顏色為橙色 35 pop.backgroundColor = UIColor.orange 36 //給按鈕繫結點選事件 37 pop.addTarget(self, action: #selector(SecondSubViewController.popPage), for: UIControl.Event.touchUpInside) 38 //將按鈕新增到當前檢視控制器的根檢視 39 self.view.addSubview(pop) 40 41 //再新增一個按鈕,當點選按鈕時 42 //跳轉(Pop)到指定序號的檢視 43 let index = UIButton(frame: CGRect(x: 40, y: 280, width: 240, height: 40)) 44 //設定按鈕上的標題文字 45 index.setTitle("Goto Index Page", for: UIControl.State()) 46 //設定按鈕的背景顏色為橙色 47 index.backgroundColor = UIColor.orange 48 //給按鈕繫結點選事件 49 index.addTarget(self, action: #selector(SecondSubViewController.gotoIndexPage), for: UIControl.Event.touchUpInside) 50 //將按鈕新增到當前檢視控制器的根檢視 51 self.view.addSubview(index) 52 53 //繼續新增一個按鈕,當點選按鈕時 54 //跳轉(Pop)到根檢視 55 let root = UIButton(frame: CGRect(x: 40, y: 340, width: 240, height: 40)) 56 //設定按鈕上的標題文字 57 root.setTitle("Goto Root Page", for: UIControl.State()) 58 //設定按鈕的背景顏色為橙色 59 root.backgroundColor = UIColor.orange 60 //給按鈕繫結點選事件 61 root.addTarget(self, action: #selector(SecondSubViewController.gotoRootPage), for: UIControl.Event.touchUpInside) 62 //將按鈕新增到當前檢視控制器的根檢視 63 self.view.addSubview(root) 64 } 65 66 //建立第一個按鈕繫結的方法 67 @objc func pushPage() 68 { 69 //例項化第二個檢視控制器 70 let viewController = SecondSubViewController() 71 //把檢視控制器,Push到導航視圖裡,相當於入棧操作 72 self.navigationController?.pushViewController(viewController, animated: true) 73 } 74 75 //建立第二個按鈕繫結的方法 76 @objc func popPage() 77 { 78 //當前檢視控制器,將從導航檢視控制器堆疊中移除, 79 //並返回至上一頁面,相當於出棧操作。 80 self.navigationController?.popViewController(animated: true) 81 } 82 83 //建立第三個按鈕繫結的方法 84 @objc func gotoIndexPage() 85 { 86 //根據導航檢視控制器中的全域性序號, 87 //查詢堆疊中指定序號的檢視控制器 88 let viewController = self.navigationController?.viewControllers[2] 89 //然後在導航檢視控制器中,跳轉至該檢視控制器 90 self.navigationController?.popToViewController(viewController!, animated: true) 91 } 92 93 //建立第四個按鈕繫結的方法 94 @objc func gotoRootPage() 95 { 96 //當用戶點選第四個按鈕時, 97 //導航控制器中的所有子檢視控制器,都將全部出棧, 98 //從而跳轉至根檢視控制器 99 self.navigationController?.popToRootViewController(animated: true) 100 } 101 102 override func didReceiveMemoryWarning() { 103 super.didReceiveMemoryWarning() 104 // Dispose of any resources that can be recreated. 105 } 106 }