Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何在像Facebook一样向下滚动后从顶部滚动-Swift 4.2_Ios_Swift_Tableview - Fatal编程技术网

Ios 如何在像Facebook一样向下滚动后从顶部滚动-Swift 4.2

Ios 如何在像Facebook一样向下滚动后从顶部滚动-Swift 4.2,ios,swift,tableview,Ios,Swift,Tableview,我想实现像Facebook应用程序一样的滚动功能,如果向下滚动页面,点击标签栏项目,然后点击从顶部开始滚动的同一标签栏项目 这是我的密码- override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) { let indexOfTab = tabBar.items?.index(of: item) if indexOfTab == 0{ let feed =

我想实现像Facebook应用程序一样的滚动功能,如果向下滚动页面,点击标签栏项目,然后点击从顶部开始滚动的同一标签栏项目

这是我的密码-

override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {

        let indexOfTab = tabBar.items?.index(of: item)
        if indexOfTab == 0{
            let feed = HomeFeedViewController()
            feed.scrollToTop()
            print("pressed tabBar: \(String(describing: indexOfTab))")
        }else if indexOfTab == 1{
            print("pressed tabBar: \(String(describing: indexOfTab))")

        }else if indexOfTab == 2{
            print("pressed tabBar: \(String(describing: indexOfTab))")

        }else if indexOfTab == 3{
            let feed = QueueViewController()
            print("pressed tabBar: \(String(describing: indexOfTab))")

        }else if indexOfTab == 4{
            print("pressed tabBar: \(String(describing: indexOfTab))")

        }

    }


 func scrollToTop(){

        feedsTableView.setContentOffset(.zero, animated: true)
    }
请试试我的密码

var canScrollToTop:Bool = true
    func tabBarController(tabBarController: UITabBarController, didSelectViewController viewController: UIViewController) {

        // Allows scrolling to top on second tab bar click
        if (viewController.isKindOfClass(CustomNavigationBarClass) && tabBarController.selectedIndex == 0) {
            if (viewControllerRef!.canScrollToTop) {
                viewControllerRef!.scrollToTop()
            }
        }
    }


    // Scrolls to top
    func scrollToTop() {
        self.View.setContentOffset(CGPoint.zero, animated: true)
    self.tblView.setContentOffset(CGPoint.zero, animated: true)
    self.collView.setContentOffset(CGPoint.zero, animated: true)
    }


    // Called when the view becomes available
    override func viewWillAppear(animated: Bool) {
        super.viewWillAppear(animated)
        canScrollToTop = true
    }

    // Called when the view becomes unavailable
    override func viewWillDisappear(animated: Bool) {
        super.viewWillDisappear(animated)
        canScrollToTop = false
    }

用于Swift

extension UIViewController {
    func scrollToTop() {
        func scrollToTop(view: UIView?) {
            guard let view = view else { return }

            switch view {
            case let scrollView as UIScrollView:
                if scrollView.scrollsToTop == true {
                    scrollView.setContentOffset(CGPoint(x: 0.0, y: -scrollView.contentInset.top), animated: true)
                    return
                }
            default:
                break
            }

            for subView in view.subviews {
                scrollToTop(view: subView)
            }
        }

        scrollToTop(view: self.view)
    }
}
使用

var previousController: UIViewController?

func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool {

        //when user is in FeedViewController and scroll at last record and want to
        if previousController == viewController {
            if let navVC = viewController as? UINavigationController, let vc = navVC.viewControllers.first as? HomeViewController {

                if vc.isViewLoaded && (vc.view.window != nil) {
                    vc.scrollToTop()
                }
                print("same")
            }
        }
        else{
            print("No same")
        }

        previousController = viewController
        return true;
    }

尝试给出一些代码,我们可以建议我为Tabbar控制器和HomeFeedViewController中的访问创建单独的类。因此,在哪里编写此代码为Tabbar控制器的单独类实现此委托方法并进行检查。您需要点击两次,如果再次点击,它将在日志中打印“相同”,此时它将上升。尝试调试您的案例我的tableview无法访问,在点击次数时总是获得零值在我的tableview中有7个自定义单元格,当我点击第一个选项卡栏按钮时,由于tablview的意外零值而崩溃。