###前提
TabBarが2つある基本画面にModalで表示されるVewControllerが1つあります。
実現したいこと
- アプリが起動した時は「Tab First」が選択されています。
- Tab Firstの「Modal画面遷移」ボタンをタップするとModalViewContに画面遷移します。
- Modal画面上の「Tab2に切り替え」ボタンをタップするとModal画面が閉じて「Tab Second」に切り替わったTabBarが表示されます。
この機能をデリゲートを使用して行おうと思っています。
###わからないこと
デリゲートの委任先(MainTabBarController)でデリゲートを設定する書き方がわかりません。
委任先でデリゲートを設定するには、委任するクラスのインスタンスを生成して、デリゲートプロパティに、そのクラスを代入する?と書く必要があると思います。
MainTabBarControllerクラス内に直接記述出来ないようなので
関数を作成してその中にデリゲートを設定する必要がると思うのですが
どう書いてよいか分からないのです。
###現状実現できていること
「Class ModalViewCont」にデリゲートインスタンス(var selectSecondTab : tabChangeDelegate?)を設定し、「TabBar2に切り替え」ボタン(IBAction)に「selectSecondTab?.tabChange()」を設定しています。
「MainTabBarController」には、デリゲートメソッド(func tabChange(){selectedIndex = 1})を書いています。
この関数で「TabSecond」に切り替わると思っています。
後は委任先(Class MainTabBarController)に、デリゲートの設定を書けば良いと思うのですが、ここがよくわかりません。
MainTabBarControllerに直接デリゲートの設定を書こうとすると、「関数内に書いてください」とエラーが出ます。
swift
1// MainTabBarController.swift 2 3import UIKit 4 5class MainTabBarController: UITabBarController, tabChangeDelegate { 6 7 /* ここにデリゲートの設定をする必要があると思いますが 8 どう書けばよいかわかりません。 9 */ 10 11 func tabChange() { 12 selectedIndex = 1 13 } 14 15 16 override func viewDidLoad() { 17 super.viewDidLoad() 18 19 20 } 21 22} 23
swift
1import UIKit 2 3class FirstViewCont: UIViewController { 4 5 @IBOutlet weak var modalSegue: UIButton! 6 7 override func viewDidLoad() { 8 super.viewDidLoad() 9 10 } 11 12 13 @IBAction func modalSegueAction(_ sender: Any) { 14 15 let modalVC = self.storyboard?.instantiateViewController(identifier: "modalVC") as! ModalViewCont 16 present(modalVC, animated: true, completion: nil) 17 18 } 19} 20
swift
1// SecondViewCont.swift 2import UIKit 3 4class SecondViewCont: UIViewController { 5 6 override func viewDidLoad() { 7 super.viewDidLoad() 8 9 } 10} 11
swift
1// ModalViewCont.swift 2 3protocol tabChangeDelegate { 4 func tabChange() 5 6} 7 8import UIKit 9 10class ModalViewCont: UIViewController, UITabBarControllerDelegate { 11 12 @IBOutlet weak var tabChangeBtn: UIButton! 13 14 var selectSecondTab : tabChangeDelegate? 15 16 override func viewDidLoad() { 17 super.viewDidLoad() 18 19 } 20 21 @IBAction func changeTab(_ sender: Any) { 22 23 selectSecondTab?.tabChange() 24 dismiss(animated: true, completion: nil) 25 26 } 27}
##開発環境
Mac-mini(M1)
macOS 11.2.1(BigSur)
XCode 12.4
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/03/03 05:11
2021/03/03 05:14
2021/03/03 06:37