1 refresh pull-to-refresh swiftui
我正在尝试使用 Introspect 库在下拉发生时刷新 SwiftUI 中的列表控件。
我的列表修改器如下:
.introspectTableView (tableView in {
tableView.refreshControl = UIRefreshControl()
// code here to get new data
tableView.refreshControl?.endRefreshing()
}
Run Code Online (Sandbox Code Playgroud)
获取新数据的代码继续执行。
任何帮助,将不胜感激。
每次刷新视图时都会调用闭包introspectTableView,这就是不断执行获取新数据的代码的原因。
要解决这个问题,您需要的是仅在用户被拉取时调用刷新代码。我可以做到这一点的唯一方法是创建一个 RefreshHelper 类,因为 UIRefreshControl 仍然依赖于@objc函数和选择器。
这是一个大致实现您想要的示例:
struct ContentView: View {
@State var data: [String] = (0...5).map { "Item \($0)" }
let refreshHelper = RefreshHelper()
class RefreshHelper {
var parent: ContentView?
var refreshControl: UIRefreshControl?
@objc func didRefresh() {
guard let parent = parent, let refreshControl = refreshControl else { return }
parent.data.append("Item \(parent.data.count)") // load data here
refreshControl.endRefreshing()
}
}
var body: some View {
List(data, id: \.self) { i in
Text("Item \(i)")
}
.introspectTableView { tableView in
let control = UIRefreshControl()
refreshHelper.parent = self
refreshHelper.refreshControl = control
control.addTarget(refreshHelper, action: #selector(RefreshHelper.didRefresh), for: .valueChanged)
tableView.refreshControl = control
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1639 次 |
| 最近记录: |