2017-07-20 51 views
0

我有一個標籤欄有五個項目,我想添加一個功能,當用戶再次點擊標籤欄項目時滾動到頂部。將UITabBarControllerDelegate添加到我想要觸發事件的視圖中,並且還創建了一個函數來確定所選標籤欄索引。Swift - 選擇標籤欄索引不觸發滾動到頂部

當我打開應用程序時,索引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

甲'UITabBarController'只能有一個代表。最後一個勝利。 – rmaddy

+0

真的!那麼,如何將自動滾動添加到兩個不同的標籤欄項目呢? –

回答

1

任何與一個delegate屬性只可具有在任何給定時間分配給它的一個代表。最近設置的delegate將接收下一個委託方法調用。

在你的情況下,你可以重置標籤控制器的delegateself在每個視圖控制器的viewDidAppear方法,因爲你希望當前可見的視圖控制器是當前的選項卡控制器委託。

添加以下需要是選項卡控制器的代表各視圖控制器:

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

    self.tabBarController?.delegate = self 
} 
+0

這個技巧!非常感謝你 :-) –

相關問題