自分が実現したいことの内容が整理できておらず、言葉足らずであったり、またコードも自分が煮詰まっている状態で書いてしまったもので余計にわかりずらかったかと思います。申し訳ありません。そして回答いただけた方々本当ありがとうございます。
タイトルでは”tabbarviewcontroller内のviewcontrollerを選択してメソッドの処理を行いたい。”という質問だったのですが、実現したいことは、他のクラスにアクセスしてメtableViewをreloadする方法です。
色々と調べた結果参考になる情報があり解決しました。
https://www.366service.com/jp/qa/b1e0da804765705aff3a1d2deedc9a60
※前回の質問内容
下記ですとtabbarVCの中身をforEachでループさせて条件の合うターゲットのvcのメソッドを処理したいのですが、手詰まっております。また片方にはNavigationControllerで遷移しています。このやり方では全くダメだったのでどうか言葉足らずで申し訳ありませんがご助言をいただけたら幸いです。```swift
コード
```swift let tab = self.tabBarController as! TabbarViewController let viewControllers = tab.viewControllers let nav = tab.selectedViewController as! UINavigationController viewControllers?.forEach({ (viewController) in if viewController is ChatListViewController{ let vc = nav.viewControllers[nav.viewControllers.count-2] let chatListVC = vc as? ChatListViewController chatListVC?.fetchChatRoom() }else if viewController is ContactUserViewController{ let chatListVC = viewController as? ChatListViewController chatListVC?.fetchChatRoom() } })
なにがどうだめだったのか(実行時エラーが出たのかなど)、どの部分で処理が上手くいってないのか、またそのように判断した理由などを添えていただかないと、具体的な解決法はご指摘できないかもしれません。
ご提示のコードだt
let nav = tab.selectedViewController as! UINavigationController
で、選択されている ViewCOntroller が UINavigationController の派生クラスと決めつけていますが、ここはこれで大丈夫なのでしょうか。
tab.sekectedIndex で何番目のタブが選択されているのかわかるので、それを使った方が安全のような気もします。
・viewControllers?.forEach の前に nav. が抜けてませんか?
・if viewController is ChatListViewController なら、その viewController が目的の ChatListViewController なので、let vc = nav.viewControllers[nav.viewControllers.count-2] は不要では?
・else if viewController is ContactUserViewController の時に、viewController を ChatListViewController にするのは変では?
・というか、if let をうまく使えば if の条件が通った後にまたキャストする必要はありません。
ご回答ありがとうございます。指摘いただいた通り色々とミスしていました。質問の内容を修正いたします。
回答2件
あなたの回答
tips
プレビュー