内省库 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
        }
    }
}