内省库 UIRefreshControl 与 SwiftUI 不工作
Introspect library UIRefreshControl with SwiftUI not working
我正在尝试使用 Introspect 库在发生下拉时刷新 SwiftUI 中的列表控件。
我的List修饰符如下:
.introspectTableView (tableView in {
tableView.refreshControl = UIRefreshControl()
// code here to get new data
tableView.refreshControl?.endRefreshing()
}
获取新数据的代码一直在执行。
如有任何帮助,我们将不胜感激。
每次刷新视图时都会调用 introspectTableView
闭包,这就是不断执行获取新数据的代码的原因。
要解决这个问题,你只需要在拉取用户的时候调用你的刷新代码即可。我能做到这一点的唯一方法是创建一个 RefreshHelper class,因为 UIRefreshControl 仍然依赖于 @objc
函数和选择器。
这是一个大致实现您想要的示例:
struct ContentView: View {
@State var data: [String] = (0...5).map { "Item \([=10=])" }
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
}
}
}
我正在尝试使用 Introspect 库在发生下拉时刷新 SwiftUI 中的列表控件。
我的List修饰符如下:
.introspectTableView (tableView in {
tableView.refreshControl = UIRefreshControl()
// code here to get new data
tableView.refreshControl?.endRefreshing()
}
获取新数据的代码一直在执行。
如有任何帮助,我们将不胜感激。
每次刷新视图时都会调用 introspectTableView
闭包,这就是不断执行获取新数据的代码的原因。
要解决这个问题,你只需要在拉取用户的时候调用你的刷新代码即可。我能做到这一点的唯一方法是创建一个 RefreshHelper class,因为 UIRefreshControl 仍然依赖于 @objc
函数和选择器。
这是一个大致实现您想要的示例:
struct ContentView: View {
@State var data: [String] = (0...5).map { "Item \([=10=])" }
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
}
}
}