2018年3月28日水曜日

StoryBoardを使わずにUINavigationController

以前ブログにも書きましたがStoryBoardを使わずに開発をしており、今回はUINavigationControllerを実装していきます。
  • Xcode 8.3.3
  • Swift 3.1
これもUITableViewController同様、難しいことはないです。
ある程度Xcode側で用意されてるので、それを利用するだけなので😅
ただし細かい調整したい場合は元クラスを調べる等、調査が必要ですので適宜Jump to definitionしましょう🙆

動作としてExample1のナビの右上NextをタップするとExample2へ遷移。
Example2ではナビの左上BackをタップでExample1へ戻れるようにします。
import UIKit

class Example1ViewController: UIViewController {
 override func viewDidLoad() {
  super.viewDidLoad()
  
  self.navigationItem.title = "Example1"
  
  self.navigationItem.leftBarButtonItem = nil
  
  let btnRight = UIBarButtonItem(title: "Next >", style: UIBarButtonItemStyle.plain, target: self, action: #selector(Example1ViewController.goNext))
  self.navigationItem.rightBarButtonItem = btnRight
 }
 
 override func didReceiveMemoryWarning() {
  super.didReceiveMemoryWarning()
 }
 
 @objc func goNext() {
  self.navigationController?.pushViewController(Example2ViewController(), animated: true)
 }
}</textarea><br />
<br />
<textarea class="code">import UIKit

class Example2ViewController: UIViewController {
 override func viewDidLoad() {
  super.viewDidLoad()
  
  self.navigationItem.title = "Example2"
  
  let btnLeft = UIBarButtonItem(title: "< Back", style: UIBarButtonItemStyle.plain, target: self, action: #selector(Example2ViewController.goBack))
  self.navigationItem.leftBarButtonItem = btnLeft
  
  self.navigationItem.rightBarButtonItem = nil
 }
 
 override func didReceiveMemoryWarning() {
  super.didReceiveMemoryWarning()
 }
 
 @objc func goBack() {
  self.navigationController?.popViewController(animated: true)
 }
}

使わないleftBarButtonItemやrightBarButtonItemをnilしなくても設定しなければ何も表示されませんが、今後の事も考えると初期化(あえて非表示してますよアピール)しておきましょう。
また、通常こんなハードコーディングをすることはありません。
例としてあえてnil設定を記述したのは、条件によってnilしたりアイテム設定したりというのが書きやすいようにです😀
abstractみたい(Swiftではprotocol extensionか?)にして他メソッドで設定するのも良いですし🙌

最後にこのViewControllerを呼出しましょう。
let example1 = UINavigationController(rootViewController: Example1ViewController())
self.present(example1, animated: true, completion: nil)

0 件のコメント:

コメントを投稿