私は、UIViewController上で "スクロールトップ"と別のUIViewControllerで "スクロール開始"を達成しようとしている次のコードがあります。UITabBarControllerDelegate 2つの別々のUIViewControllerで - Swift
最初のVCにはテーブルビューがあり、2番目のVCにはコレクションビューがあります。
-NearMeViewController-
override func viewDidLoad() {
super.viewDidLoad()
self.tabBarController?.delegate = self
//....
}
extension NearMeViewController: UITabBarControllerDelegate {
func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) {
let tabBarIndex = tabBarController.selectedIndex
if tabBarIndex == 0 {
self.nearMeTable.setContentOffset(CGPoint.zero, animated: true)
}
}
}
-MapSearchViewController-
override func viewDidLoad() {
super.viewDidLoad()
self.tabBarController?.delegate = self
//....
}
extension MapSearchViewController: UITabBarControllerDelegate {
func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) {
let tabBarIndex = tabBarController.selectedIndex
if tabBarIndex == 2 && requests.mapEventData.count > 0 {
self.resultsCollectionView?.scrollToItem(at: IndexPath(row: 0, section: 0),
at: .left,
animated: true)
}
}
}
これらはどちらも同じUITabBarに接続されています。 問題は、私がアプリを開き、tabBarIndex 0を押すと、テーブルビューの上にスクロールすることです。
私はVCを変更し、tabBarIndex 2を押してみます。コレクションビューの最初の項目に移動します。
その後私は最初のVCに戻り、tabBarIndex 0を押してみると、tableviewは上にスクロールしていません(最初にアプリケーションを開いたときのように)。
しかし、コレクションビューの2番目のVCは正常に動作しています。
なぜこのようなことが起こるのでしょうか?
と私はどのビューコントローラーにこれを置く必要がありますか? –
このタイプのタスクのために 'UITabBarController'をサブクラス化しました...あるいは、別の' NSObject、UITabBarControllerDelegate'クラスを作成してそれをデリゲートとして割り当てるか、最初のタブのView Controllerに置くことができます。私はサブクラス化をお勧めしたい。 – DonMag
そして 'UITabBarController'をサブクラス化すれば、どうすれば他のvcsからtableviewやcollectionviewにアクセスできますか? –