iOS開發(Swift):建立UINavigationView的三種方法
UINavigationController是iOS開發中很常用的一種元件,由於種種原因許多人喜歡從程式碼建立檢視控制元件,包括UINavigationController,但是有時候我們的螢幕控制元件太多,一方面使用storyboard可以方便設計,但是另一方面又需要用程式碼建立UINavigationController來靈活控制程式執行,下面將分別介紹程式碼,IB和兩者結合建立一個UINavigationController的方法:
1.程式碼建立UINavigationController
新建一個SingleView專案,將AppDelegate.swift檔案中application:didFinishLaunchingWithOptions:方法修改如下,注意原來的window為optional型別,為了方便可以改為var window: UIWindow!,表示window值我們會賦值。然後建立一個根檢視控制器rootViewController,一個導航控制器navigationController。
在application:didFinishLaunchingWithOptions:函式中初始化以上三個變數,將window設定為活動視窗並可見,使用rootViewController建立navigationController,把navigationController的檢視新增到window中。var window: UIWindow! var rootViewController: UIViewController! var navigationController: UINavigationController! func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { // Override point for customization after application launch. window = UIWindow(frame: UIScreen().bounds) window.makeKeyAndVisible() rootViewController = UIViewController() navigationController = UINavigationController(rootViewController: rootViewController) window.rootViewController = rootViewController window.addSubview(navigationController.view) return true }
到此,執行程式可見到如下介面。見到如圖上部分的導航條即表示成功建立NavigationController。
由於該rootViewController通過rootViewController = UIViewController()初始化,所以該介面一片漆黑,接下來我們把初始化rootViewController的語句改改。
在新建專案時,Xcode生成了一個ViewController類,我們可以使用該類來初始化,把上面rootViewController = UIViewController()改成rootViewController = ViewController(),然後到ViewController類中,將viewDidLoad函式修改如下:
override func viewDidLoad() {
super.viewDidLoad()
self.navigationItem.rightBarButtonItem = UIBarButtonItem(title: "下一個", style: UIBarButtonItemStyle.Plain, target: self, action: "next:")
}
並新增一個函式如下
func next(sender: AnyObject) {
println("跳轉")
}
再次執行程式,應該可以看到控制檯列印 跳轉 兩個字,能夠執行next函式,意味著可以進行檢視跳轉。
下次我們將為NavigationController新增更多內容,讓他們能在不同檢視跳轉
,但是現在我們繼續看看另一種建立NavigationController的方法。
2.IB建立UINavigationController
IB建立UINavigationController確實也是很方便,新建一個SingleView App,開啟Main.storyboard,點選選單Editor->Embed In->Navigation Controller,即可完成,介面如下
這樣,一個NavigationController就建立好了,那麼要實現跳轉,首先當然要有按鈕,到Object庫中拖一個Bar Button Item到上圖右側的導航欄處
到此,通過IB建立NavigationController也實現了。接下來就是兩者結合的時候了。
3.通過程式碼連線Storyboard建立NavigationController。
首先建立一個SingleView App,開啟storyboard,隨便設計佈局,接下來我們將連線該storyboard。
由於程式碼中需要引用,因此同樣到AppDelegate中新增以下三個變數
var window: UIWindow!
var rootViewController: UIViewController!
var navigationController: UINavigationController!
但是在application:didFinishLaunchingWithOptions函式中我們將使用storyboard來建立rootViewController,修改application:didFinishLaunchingWithOptions函式如下:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
window = UIWindow(frame: UIScreen.mainScreen().bounds)
window.makeKeyAndVisible()
var storyboard = UIStoryboard(name: "Main", bundle: nil)
rootViewController = storyboard.instantiateViewControllerWithIdentifier("MyViewController")
navigationController = UINavigationController(rootViewController: rootViewController)
window.rootViewController = rootViewController
window.addSubview(navigationController.view)
return true
}
同樣我們初始化window,navigationController,但是rootViewController我們是使用storyboard來初始化的,
var storyboard = UIStoryboard(name: "Main", bundle: nil) 首先根據名字Main獲得storyboard的引用,
rootViewController = storyboard.instantiateViewControllerWithIdentifier("MyViewController") 然後從storyboard根據Identifier例項化rootViewController,既然要根據Identifier,因此我們回到storyboard檔案為其新增ID。
打卡storyboard檔案,點選介面空白處或點選上面三個圖示的最左邊,選擇View Controller
開啟Inspector,新增Storyboard ID:MyViewController