下記の画像のように画面遷移をしたいと考えたところ。
遷移先のVCにはNavigationbarがないので、遷移元のNavigationbarを残しつつ、遷移することにする。
sample.swift
let vc = storyboard!.instantiateViewController(withIdentifier: "detail") as! GroupDetailViewController
//遷移先のtabbarを非表示にしている
vc.hidesBottomBarWhenPushed = true
//遷移先に渡す変数を宣言
vc.groupimage = (groupimage?.image)!
vc.namelabel = item.name!
vc.joinnumber = String(item.memberofnumber!)
vc.amountlabel = String(item.payment!)
vc.groupid = item.groupid!
//このメソッドでNavigationbarを残しつつ、遷移する
self.navigationController?.pushViewController(vc, animated: true)
ただ、このまんまだと、Navigationcontrollerを通らず遷移することになり、Navigationbarの「戻る」をタップすると、「そんなアクションは設定されていない」と怒られてしまいます。
そこで、遷移先で下記のように実装します。特殊なことはしておらず、Navigationbarにボタンを設定して、タップしたら遷移元に戻るように処理を行います。
sample.swift
override func viewDidLoad() {
super.viewDidLoad()
let leftButton = UIBarButtonItem(title: "戻る", style: UIBarButtonItemStyle.plain, target: self, action: #selector(GroupDetailViewController.gotoback))
leftButton.tintColor = UIColor.white
self.navigationItem.leftBarButtonItem = leftButton
--中略--
}
@objc func gotoback() {
if UserDefaults.standard.string(forKey: "tappedgroupname") == nil {
//遷移元に戻る
self.navigationController?.popViewController(animated: true)
} else {
--中略--
}
}
NavigationControllerを取得して、その上で遷移すればいいんだろうけど、やり方がよくわからず力技で実装しました。