Swift - 选中的选项卡栏索引不会触发滚动到顶部

时间:2017-07-20 02:36:55

标签: swift uitabbarcontroller

我有一个包含五个项目的标签栏,我试图添加一个功能,当用户再次点击标签栏项目时滚动到顶部。将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)
    }
}

1 个答案:

答案 0 :(得分:1)

任何具有delegate属性的内容在任何给定时间只能为其分配一个代理。最近设置delegate的内容将接收下一个委托方法调用。

在您的情况下,您可以在每个视图控制器的delegate方法中将选项卡控制器的self重置为viewDidAppear,因为您希望当前可见的视图控制器成为当前选项卡控制器委托。

将以下内容添加到需要作为选项卡控制器委托的每个视图控制器:

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

    self.tabBarController?.delegate = self
}
相关问题