2017-07-20 8 views
0

5つのアイテムのタブバーがあり、ユーザーがタブバーアイテムを再びタップすると上部にスクロールする機能を追加しようとしています。イベントをトリガーするビューにUITabBarControllerDelegateを追加し、選択したタブバーインデックスを決定する関数も作成しました。スウィフト - 選択されたタブバーインデックスがトリガーされないトップへスクロール

アプリを開くと、インデックス0が自動的に選択され、完全に機能します。下にスクロールしてタブバーのインデックスをタップすると、ビューは自動的に上にスクロールします。問題は、インデックス1に移動してスクロールをトリガするときに発生します。それはどうにかして、最初のタブバーの項目からオートスクロールを完全に削除します。

自動スクロールせずに他のタブバー項目を選択しても、インデックス0にはまったく影響しません。

ホーム(インデックス0)

func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) { 
    let tabBarIndex = tabBarController.selectedIndex 
    if tabBarIndex == 0 { 
     self.collectionView?.setContentOffset(CGPoint(x: 0, y: -10), animated: true) 
    } 
} 

ユーザー(インデックス1)

func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) { 
    let tabBarIndex = tabBarController.selectedIndex 
    if tabBarIndex == 1 { 
     self.tableView?.setContentOffset(CGPoint(x: 0, y: 0), animated: true) 
    } 
} 
+0

はタブコントローラのデリゲートにする必要があり、各ビューコントローラに以下を追加します。最後のものが勝つ。 – rmaddy

+0

本当に!では、どうやって2つの異なるタブバー項目にオートスクロールを追加できますか? –

答えて

1

delegateプロパティを使って何が唯一の任意の時点でそれに割り当てられた1つのデリゲートを持つことができます。最も最近にdelegateを設定したものは、次の代理メソッド呼び出しを受け取ります。

現在表示されているビューコントローラを現在のタブコントローラデリゲートにするため、各ビューコントローラのviewDidAppearメソッドでタブコントローラのdelegateselfにリセットすることができます。 `UITabBarController`が唯一の代理人を持つことができます

override func viewDidAppear(_ animated: Bool) { 
    super.viewDidAppear(animated) 

    self.tabBarController?.delegate = self 
} 
+0

それはトリックでした!どうもありがとうございました :-) –

関連する問題