拉动刷新堆栈视图

时间:2018-11-18 21:57:48

标签: swift

我想在当前的UIViewController上实现拉动刷新功能。我有10个按钮-在一个水平堆栈视图中创建5行垂直堆栈视图以创建网格。我希望能够在此处刷新以运行功能并更新按钮标签。我有什么选择?

Storyboard Layout

3 个答案:

答案 0 :(得分:0)

您不能将刷新控件添加到堆栈视图中以刷新内容。

这里的重要是您必须将刷新控件添加到滚动视图中,以使其按预期运行:

  

UIRefreshControl

     

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

     

UIRefreshControl

在这种情况下,我建议您将网格设为UICollectionView而不是堆栈视图。

此外,如果您尝试向网格中添加另一个按钮怎么办?容器视图应该是可滚动的,这意味着集合视图将更易于维护。


此外,您也许可以利用UICollectionViewController的影响力。检查以下内容可能会有用:

答案 1 :(得分:0)

您最好的选择是使用UICollectionView。创建一个满足您所需需求的自定义单元。之后,您可以添加刷新控制器:

// Global variable
let pullToRefreshData = UIRefreshControl()

// Where you initialise the collectionView (eg. viewDidAppear())
collectionView.refreshControl = pullToRefreshData
pullToRefreshData.addTarget(self, action: #selector(refreshData), for: .valueChanged)

// This will be called when you pull from top of the collectionView
@objc func refreshData() {
    // Maybe you need to call a server API, stop the reloading animation when you have the data
    pullToRefreshData.endRefreshing()

    // Refresh the data from the collectionView
    collectionView.reloadData()
}

如果只需要使用实现,则可以提供上下文。

答案 2 :(得分:0)

对于这个用例,我建议使用UICollectionView,它内置了对UIRefreshControl的支持。但是,如果您的按钮有所不同,或者您想要一个更简单,更不可靠的解决方案,则可以将UIStackView嵌入UIScrollView中并将其设置为refreshControl

请参阅:https://developer.apple.com/documentation/uikit/uiscrollview/2127691-refreshcontrol