【问题标题】:Update the tableView when it has been scrolled to the highest point?滚动到最高点时更新tableView?
【发布时间】:2018-03-19 06:42:22
【问题描述】:

我有一个名为challengeTable 的表格视图。该表包含一个图像、一些文本和一个按钮。这些值是从 RESTFUL API 检索的。

var Sec1 = [[String]]()

    public func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String?{
    return sectionTitles[section]

    }
    public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int{
        switch section {
        case 0 :
            return Sec1.count
        default:
            return Sec2.count

        }

    }
    public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell{
        let cell = challengeTable.dequeueReusableCell(withIdentifier: cellID) as! CustomisedCell
        cell.selectionStyle = .none

        switch indexPath.section {
        case 0:

            cell.CAChallengeTitle.text = Sec1[indexPath.row][0]
            cell.CAChallengeTitle.font = UIFont.boldSystemFont(ofSize: 13)
            cell.CAChallengeDescription.text = "Starting Date: \(Sec1[indexPath.row][1]) \n\n Ending Date: \(Sec1[indexPath.row][2])"
            cell.CAChallengeDescription.numberOfLines = 3
            cell.CAChallengeIMG.image = UIImage(named : "Step" )
            cell.CAChallengeButt.tag = indexPath[1]
            cell.CAChallengeButt.setTitle("Detsils >", for: .normal)
            print("Done with sectoin 0")
        default:
            cell.CAChallengeTitle.text = Sec2[indexPath.row]
            cell.CAChallengeDescription.text = "\(Sec2[indexPath.row])  "
            cell.CAChallengeButt.tag = indexPath[1]
            cell.CAChallengeButt.setTitle("I am interested >", for: .normal)
            print("Done with sectoin 1")

        }
       return cell

    }

我可以通过调用以下方法重新加载表的数据:

Sec1.removeAll() 
challengeTable.reloadData()

目前我正在使用导航控制器。因此,我可以简单地通过来回导航来更新我的表格。然而,我想要做的是,我只想在用户滚动到顶部时重新加载我的表数据。

知道我怎么可能做到这一点吗? 谢谢:)

【问题讨论】:

    标签: swift xcode uitableview scrollview


    【解决方案1】:

    听起来你更像是需要分页/延迟加载

    这是您想要实现的目标吗?

    Reference 1

    Reference 2

    【讨论】:

    • 不是我想要的。
    • 确认到 UIScrollViewDelegate,实现 func scrollViewDidScroll(_ scrollView: UIScrollView) 当用户滚动表格视图时你会得到回调,检查scrollView的内容偏移量Y是否等于表格视图的最大偏移量是的,如果两者都匹配,这意味着表格滚动到屏幕底部,您可以在此处重新加载表格,这可能会解决问题
    【解决方案2】:

    UIRefreshControl 是满足您的要求所需要的。

    一个可以启动刷新表视图的标准控件 内容。

    除了将刷新控件分配给表格视图 控制器的 refreshControl 属性,你必须配置目标 和控件本身的动作。控件不启动 直接刷新操作。相反,它发送 valueChanged 事件 何时应该发生刷新操作。您必须分配一个动作 方法,并使用它来执行任何操作 需要。

    只要在refreshControl 发送valueChanged 事件时,只需将refreshControl 添加到您的UITableView 并在tableView's 对象上调用reloadData,即

    override func viewDidLoad()
    {
        super.viewDidLoad()
        let refreshControl = UIRefreshControl()
        refreshControl.addTarget(self, action: #selector(reloadTable), for: .valueChanged)
        self.tableView.refreshControl = refreshControl
    }
    
    @objc func reloadTable()
    {
        self.tableView.reloadData()
        self.tableView.refreshControl?.endRefreshing()
    }
    

    UIRefreshControl 本身不知道什么时候应该隐藏。要隐藏控件,只需调用endRefreshing: 方法即可。

    如果您仍然遇到任何问题,请告诉我。快乐编码..?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-26
      • 1970-01-01
      相关资源
      最近更新 更多