SwiftUI不工作时的内省库UIRefreshControl

SwiftUI不工作时的内省库UIRefreshControl,swiftui,refresh,pull-to-refresh,Swiftui,Refresh,Pull To Refresh,我正在尝试使用内省库在发生下拉时刷新SwiftUI中的列表控件 我的列表修饰符如下: .introspectTableView (tableView in { tableView.refreshControl = UIRefreshControl() // code here to get new data tableView.refreshControl?.endRefreshing() } 获取新数据的代码一直在执行 任何帮助都将不胜感激。每次刷新视图时都会

我正在尝试使用内省库在发生下拉时刷新SwiftUI中的列表控件

我的列表修饰符如下:

.introspectTableView (tableView in {    
    tableView.refreshControl = UIRefreshControl()
    // code here to get new data
    tableView.refreshControl?.endRefreshing()
}
获取新数据的代码一直在执行


任何帮助都将不胜感激。

每次刷新视图时都会调用
introspectTableView
闭包,这就是为什么获取新数据的代码一直在执行的原因

要解决这个问题,您需要的是仅在用户被拉入时调用刷新代码。我能做到这一点的唯一方法是创建RefreshHelper类,因为UIRefreshControl仍然依赖于
@objc
函数和选择器

下面的示例大致实现了您想要的功能:

struct ContentView:View{
@状态变量数据:[String]=(0…5).map{“Item\($0)”}
让refreshHelper=refreshHelper()
类刷新帮助器{
var父对象:ContentView?
var refreshControl:UIRefreshControl?
@objc func didfresh(){
guard let parent=parent,let refreshControl=refreshControl else{return}
parent.data.append(“Item\(parent.data.count)”//在此处加载数据
refreshControl.endRefreshing()
}
}
var body:一些观点{
列表(数据,id:\.self){i在
文本(“项目\(i)”)
}
.introspectTableView{tableView中的
let control=UIRefreshControl()
refreshHelper.parent=self
refreshHelper.refreshControl=控件
control.addTarget(refreshHelper,操作:#选择器(refreshHelper.didRefresh),用于:.valueChanged)
tableView.refreshControl=控件
}
}
}

每次刷新视图时都会调用
introspectTableView
闭包,这就是为什么获取新数据的代码一直在执行的原因

要解决这个问题,您需要的是仅在用户被拉入时调用刷新代码。我能做到这一点的唯一方法是创建RefreshHelper类,因为UIRefreshControl仍然依赖于
@objc
函数和选择器

下面的示例大致实现了您想要的功能:

struct ContentView:View{
@状态变量数据:[String]=(0…5).map{“Item\($0)”}
让refreshHelper=refreshHelper()
类刷新帮助器{
var父对象:ContentView?
var refreshControl:UIRefreshControl?
@objc func didfresh(){
guard let parent=parent,let refreshControl=refreshControl else{return}
parent.data.append(“Item\(parent.data.count)”//在此处加载数据
refreshControl.endRefreshing()
}
}
var body:一些观点{
列表(数据,id:\.self){i在
文本(“项目\(i)”)
}
.introspectTableView{tableView中的
let control=UIRefreshControl()
refreshHelper.parent=self
refreshHelper.refreshControl=控件
control.addTarget(refreshHelper,操作:#选择器(refreshHelper.didRefresh),用于:.valueChanged)
tableView.refreshControl=控件
}
}
}
< /代码>考虑下一步,然后考虑下一步。