控制器NavigationController常用于用来做层次化UI导航。类名为UINavigationController。
NavigationController可以通过属性包含多个ViewController、一个UINavigationBar、一个可选的UIToolbar。
以一个共三层的ViewController的案例,来展示NavigationController的使用:
代码如下:
import UIKit @UIApplicationMain class AppDelegate: UIResponder,UIApplicationDelegate { var window: UIWindow? var nav : Nav? func application(_ application: UIApplication,didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { self.window = UIWindow(frame: UIScreen.main.bounds) nav = Nav() self.window!.rootViewController = nav self.window?.makeKeyAndVisible() return true } } class Nav: UINavigationController { var count = 0 var label : UILabel! override func viewDidLoad() { super.viewDidLoad() self.view.backgroundColor = .white self.pushViewController(Level1(),animated: true) } } class Level1: UIViewController { var count = 0 var label : UILabel! override func viewDidLoad() { super.viewDidLoad() self.title = "Level 1" self.view.backgroundColor = .white let button = UIButton(type: .system) button.frame = CGRect(x: 120,y: 100,width: 100,height: 50) button.setTitle("Dive Into 2",for: .normal) button.addTarget(self,action: #selector(Level1.buttonAction(_:)),for: .touchUpInside) view.addSubview(button) } func buttonAction(_ sender:UIButton!){ let appDelegate = UIApplication.shared.delegate as! AppDelegate appDelegate.nav?.pushViewController(Level2(),animated: true) } } class Level2: UIViewController { var count = 0 var label : UILabel! override func viewDidLoad() { super.viewDidLoad() self.title = "Level 2" self.view.backgroundColor = .white let button = UIButton(type: .system) button.frame = CGRect(x: 120,height: 50) button.setTitle("Dive Into 3",for: .normal) button.addTarget(self,action: #selector(Level2.buttonAction(_:)),for: .touchUpInside) view.addSubview(button) } func buttonAction(_ sender:UIButton!){ let appDelegate = UIApplication.shared.delegate as! AppDelegate appDelegate.nav?.pushViewController(Level3(),animated: true) } } class Level3: UIViewController { var count = 0 var label : UILabel! override func viewDidLoad() { super.viewDidLoad() self.title = "Level 3" self.view.backgroundColor = .white let button = UIButton(type: .system) button.frame = CGRect(x: 120,height: 50) button.setTitle("End",action: #selector(Level3.buttonAction(_:)),for: .touchUpInside) view.addSubview(button) } func buttonAction(_ sender:UIButton!){ } }
解释下: