どうも。
自学がやっと、残り一時間となったみやびです。
仮免までめっちゃ長くかかったのに、
卒業までの教習、二ヶ月もかかっておらん。
仮免までどんだけ、なまけてたっちゅうねん。
さて、本題に移ろう。。。
表記の件、なんだかなかなかいい方法が見つからなかったので、最終的に自分で考えてやったヨ。
ってわけで備忘録。
まず、下記エントリーを参照して、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)
}
}
見てもらえればわかると思うが、
戻る移動をする時に、戻り先のインスタンスを使い、メソッドを実行すればいい。
これ、戻り先の方で、戻ってきた時を検知して、そのビュー内で実行したかったのだが、
どうやってもうまくいかなかったので、この方法を編み出しました。
やっぱり、スクリプト言語に慣れた自分にとっては、難しいわ、オブジェクト指向・・・。
さて、まだまだ頑張るか。
コメントする