UITabBar を使った画面遷移の場合、どのタブからどのタブへ遷移したのか全て管理するのは大変なので、一般的には Singleton でデータを管理するクラスを作り、そこで一元的にデータを管理するのが一般的かと思います。
上記の質疑や関連するリンクが参考になるのではないでしょうか。
ところで、
Value of type 'UIViewController?' has no member 'argDate'
このエラーが出ている原因は、
Swift
1 let UINavigationController = tabBarController?.viewControllers?[2]
この行で viewControllers?[2]
に相当するカスタムクラスにキャストしていないことが原因かと思われます(キャストしていなければ、遷移先は UIViewController
クラスと仮定されますが、そのクラスには argDate
というプロパティは存在しないため)。
たとえば、遷移先のカスタムクラスが ThirdViewController
であれば
Swift
1 if let nextVC = tabBarController?.viewControllers?[2] as? ThirdViewController {
2 nextVC.argDate = date
3 tabBarController?.selectedViewController = nextVC
4 }
のような感じで適切にダウンキャストすれば、エラー(コンパイル前の警告)も出ず、また値も渡されると思います(もちろん、遷移先で適切に処理しなければいけませんが)。
遷移先が NavigationController であり、かつスタックの先頭に移動するのであれば
Swift
1 if let nextVC = tabBarController?.viewControllers?[2] as? UINavigationController {
2 if let topVC = nextVC.topViewController as? ThirdViewController {
3 topVC.previousVC = 1
4 tabBarController?.selectedViewController = nextVC
5
6 }
7 }
このような感じでしょうか。
まずは、遷移先が UINavigationController か否かを判断し、次に NavigationController (のスタックの)の先頭に入っている View Controller が ThirdViewController か判断し、そうであれば値を入れるという具合です。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/10/16 14:51 編集
2020/10/16 14:50
2020/10/16 14:54
2020/10/16 15:09
2020/10/16 15:23
2020/10/16 15:31
2020/10/16 15:34
2020/10/16 15:40
2020/10/16 15:41