※この記事は7年以上前の記事です。
現在は状況が異なる可能性がありますのでご注意ください。
どうも。
自学がやっと、残り一時間となったみやびです。
仮免までめっちゃ長くかかったのに、
卒業までの教習、二ヶ月もかかっておらん。
仮免までどんだけ、なまけてたっちゅうねん。
さて、本題に移ろう。。。
表記の件、なんだかなかなかいい方法が見つからなかったので、最終的に自分で考えてやったヨ。
ってわけで備忘録。
まず、下記エントリーを参照して、Storyboad使わずにUINavigationControllerを配置する方法をやってください。
(本エントリーがやりたいことは、Storyboad使っても多分できますが、本エントリーでは、Storyboad無しの方法です)
●storyboardを使わず、Swiftでナビゲーションバーをつくる(UINavigationControllerとか)
では、流れの説明。
AとBのビューがありまして、
AからBビューを表示して、その後、
BからAに戻った時に、Aビューのメソッドを実行、ってことをします。
まずAビューの準備。
import UIKit class AViewController: UIViewController { // ボタンを用意 private var nextBtn: UIBarButtonItem! override func viewDidLoad() { super.viewDidLoad() self.title = "Aビュー" setNavigation() } // ナビゲーションの準備 func setNavigation(){ self.nextBtn = UIBarButtonItem(title: "Bビューへ", style: .plain, target: self, action: #selector(AViewController.toNextView(sender: ))) let font = UIFont.boldSystemFont(ofSize: 16) self.nextBtn.setTitleTextAttributes([NSAttributedStringKey.font: font], for: UIControlState.normal) self.navigationItem.rightBarButtonItem = self.nextBtn } func toNextView(sender: Any){ // この二行で、アニメーションつきで移動 let nextView = BViewController() self.navigationController?.pushViewController(nextView, animated: true) } func backToTheFuture(){ // 戻ってきた時に実行するメソッド print("懐かしいなをい") } }
お次は、次ビューの、Bビューだ。
import UIKit class BViewController: UIViewController { // ボタンを用意 private var prevBtn: UIBarButtonItem! override func viewDidLoad() { super.viewDidLoad() self.title = "Bビュー" setNavigation() } // ナビゲーションの準備 func setNavigation(){ self.prevBtn = UIBarButtonItem(title: "Aビューへ", style: .plain, target: self, action: #selector(BViewController.toPrevView(sender: ))) let font = UIFont.boldSystemFont(ofSize: 16) self.prevBtn.setTitleTextAttributes([NSAttributedStringKey.font: font], for: UIControlState.normal) self.navigationItem.leftBarButtonItem = self.prevBtn } func toPrevView(sender: Any){ // アニメーションつきで移動 let vcCount = (self.navigationController?.viewControllers.count)! - 2 let vcBefore = self.navigationController?.viewControllers[vcCount] as? AViewController // ここで、前ページで実行したいメソッドを実行する vcBefore?.backToTheFuture() self.navigationController?.popToViewController(vcBefore!, animated: true) } }
見てもらえればわかると思うが、
戻る移動をする時に、戻り先のインスタンスを使い、メソッドを実行すればいい。
これ、戻り先の方で、戻ってきた時を検知して、そのビュー内で実行したかったのだが、
どうやってもうまくいかなかったので、この方法を編み出しました。
やっぱり、スクリプト言語に慣れた自分にとっては、難しいわ、オブジェクト指向・・・。
さて、まだまだ頑張るか。
コメントする