如何转到表格顶部按一下按钮查看

时间:2019-07-27 01:59:59

标签: ios swift uitableview

我正在使用swift,我想按一下按钮后便会转到表格顶部,就像在Twitter上一样,按下主屏幕按钮会将您带到Feed的顶部,到目前为止,我还无法找到一个可行的解决方案,这就是我所尝试的:

tableView.setContentOffset(.zero, animated: true)

tableView.setContentOffset(CGPoint(x: 0.0, y: -tableView.contentInset.top), animated: true)

func scrollToTop(){
        let indexPath = IndexPath(row: 0, section: 0)
        tableView.scrollToRow(at: indexPath, at: .top, animated: true)
    }

所有解决方案都只会将您带到任意单元格,如果您也知道在单击标签栏按钮时也可以执行此操作的方法,则可以加分

4 个答案:

答案 0 :(得分:2)

首先,我喜欢您的用户名。

接下来,您发布的解决方案又有什么问题?他们是正确的,除了UITableView内置函数外,似乎没有其他更好的方法可以使用UICollectionViewscrollTo...来做到这一点。并为offset设置UIScrollView

要处理标签栏上的点击,您可以做的一件事是将UITabBarController子类化,并遵循其协议,并实现UITabBarControllerDelegate所需的方法,例如:

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

您可以从那里处理所有内容,并从那里获取viewController对象并将其投射到您的家庭课程,然后将视图滚动到顶部。

我为此使用什么功能?它与您的相似,但有一点条件:

func hasRowAtIndexPath(indexPath: IndexPath) -> Bool {
    return indexPath.section < self.numberOfSections && indexPath.row < self.numberOfRows(inSection: indexPath.section)
}

func scrollToTop(animated: Bool) {
    let indexPath = IndexPath(row: 0, section: 0)
    if self.hasRowAtIndexPath(indexPath: indexPath) {
        self.scrollToRow(at: indexPath, at: .top, animated: animated)
    }
}

此外,尝试点击应用程序的状态栏,看看它会带您到哪里。

答案 1 :(得分:0)

我再次编辑了答案,不涉及indexPath:

@IBOutlet weak var myButton: UIButton!

override func viewDidLoad() { 
  super.viewDidLoad
}


@IBAction func button(_ sender: UIButton) { 

  myButton.isSelected = !myButton.isSelected
  tableView.scrollRectToVisible(CGRect(x: 0, y: 0, width: tableView.frame.width, height: tableView.frame.height), animated: true) 

}

 override func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {

    if myButton.isSelected {

        print("SUCCESS 1")


    }
}

override func scrollViewWillEndDragging(_ scrollView: UIScrollView,   withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {
    if myButton.isSelected {
        myButton.isSelected = false
        print("SUCCESS 2")

    }
}

答案 2 :(得分:0)

我猜这是按钮函数中的其他一些逻辑与scrollToTop()函数搞混了,此代码有效:

func scrollToTop(){
        tableView.setContentOffset(.zero, animated: true)
    }

    @IBAction func BlogPressed(_ sender: Any) {

        if(BlogIndicator.alpha == 1.0){
            scrollToTop()
        } else {
            articleRefresh()
            self.articleArray = self.blogArray

            BlogIndicator.alpha = 1.0
            NewsIndicator.alpha = 0.0
            RosterIndicator.alpha = 0.0
            DraftIndicator.alpha = 0.0

            tableView.reloadData()
        }
    }

但是我仍在寻找一种解决方案,用于在按下标签栏按钮时转到表格视图的顶部

答案 3 :(得分:-1)

将ScrollViewDelegate添加到您的视图控制器

class ListViewController: UIViewController, UIScrollViewDelegate

使用以下代码添加功能

@IBOutlet weak var bottomToTopButton : UIButton!

在您的ViewDidLoad

bottomToTopButton.addTarget(self, action: #selector(scrollToTop), for: .touchUpInside)


// MARK:- SCROLL TO TOP EVENTS
@objc func scrollToTop(sender:UIButton){
    ListTV.setContentOffset(CGPoint.zero, animated: true)
    bottomToTopButton.isHidden = true

}

func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
    print(hotelListTV.contentOffset.y)
    if ListTV.contentOffset.y < 170 {
        bottomToTopButton.isHidden = true
    }else {
        bottomToTopButton.isHidden = false
    }

}