Swift - 选定的选项卡栏索引未触发滚动到顶部



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

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

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

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

override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
self.tabBarController?.delegate = self
}

最新更新