Edited at

storyboardを使わず、Swiftでナビゲーションバーをつくる(UINavigationControllerとか)

なんだか、storyboardは使いたくないのです。

下のようなものをコードだけでつくります。

やることは


  • ViewController.swiftに書き書きして

  • SecondViewController.swiftを作成して、ほんのちょびっと書いて

  • AppDelegateにちょっと(6行ほど)追加すれば完成!

簡単ですので、ぜひ試してみてください。

3a4ef2aaa175e3c0a995f71e3360b885.gif


ViewController.swift

import UIKit

class ViewController: UIViewController {

// ボタンを用意
var addBtn: UIBarButtonItem!

override func viewDidLoad() {
super.viewDidLoad()

// タイトルを付けておきましょう
self.title = "Home"

// addBtnを設置
addBtn = UIBarButtonItem(barButtonSystemItem: .Add, target: self, action: "onClick")
self.navigationItem.rightBarButtonItem = addBtn
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}

// addBtnをタップしたときのアクション
func onClick() {
let second = SecondViewController()
self.navigationController?.pushViewController(second, animated: true)
}
}



SecondViewController.swift

import UIKit

class SecondViewController: UIViewController {

override func viewDidLoad() {
super.viewDidLoad()
self.title = "Second"

// ただ背景色がシアンなだけ
self.view.backgroundColor = UIColor.cyanColor()
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}


下のAppDelegate.swiftは、もう面倒なので追加したトコだけ、追加って書いてあります。。


AppDelegate.swift


import UIKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

var window: UIWindow?

/*
以下1行追加
*/

var myNavigationController: UINavigationController?

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// Override point for customization after application launch.

/*
以下5行追加
*/

let first: ViewController = ViewController()
myNavigationController = UINavigationController(rootViewController: first)
self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
self.window?.rootViewController = myNavigationController
self.window?.makeKeyAndVisible()

return true
}

func applicationWillResignActive(application: UIApplication) {}
func applicationDidEnterBackground(application: UIApplication) {}
func applicationWillEnterForeground(application: UIApplication) {}
func applicationDidBecomeActive(application: UIApplication) {}
func applicationWillTerminate(application: UIApplication) {}
}