如何访问内容视图';稍后在SwiftUI中使用哪些元素?
假设我有这样一个内容视图:如何访问内容视图';稍后在SwiftUI中使用哪些元素?,swift,swiftui,Swift,Swiftui,假设我有这样一个内容视图: struct ContentView: View { @State private var selection = 0 var body: some View { TabView(selection: $selection) { CustomClass() .tabItem { VStack {
struct ContentView: View {
@State private var selection = 0
var body: some View {
TabView(selection: $selection) {
CustomClass()
.tabItem {
VStack {
Image("First")
Text("First")
}
}
.tag(0)
Button(action: { EmployeeStorage.sharedInstance.reload() }) {
Text("Reload")
}
.tabItem {
VStack {
Image("Second")
Text("Second")
}
}
.tag(1)
}
}
}
// MARK: - SomeDelegateThatUpdatesMeLater
extension ContentView: SomeDelegateThatUpdatesMeLater {
func callback() {
// Here I want to update my content view's subviews
// The ContentClass instance needs to be updated
}
}
假设我想要侦听回调方法,然后稍后更新内容视图的选项卡编号1(CustomClass)。如何访问内容视图的子视图?我需要类似UIKit的subviewWithTag(:)的东西。SwiftUI中是否有类似的功能?您可能应该重新考虑您的方法。你到底想发生什么?您有一些获取(或更新)数据的外部数据模型类型,您希望视图对此做出反应吗?如果是这种情况,请创建一个
observateObject
,并将其传递给您的CustomClass
struct CustomClass:View{
@观测对象var模型:模型
var body:一些观点{
//根据观察到的对象创建视图
}
}
也许您希望收到来自CustomClass
的事件通知
struct CustomClass:View{
var onButtonPress:()->Void={}
var body:一些观点{
按钮(“按我”){self.onButtonPress()}
}
}
结构父视图:视图{
变量体:某些视图{
CustomClass(onButtonPress:{/*在此处对按键作出反应*/})
}
}
最后,如果您真的想在视图上添加某种标记
,您可以利用SwiftUI中的首选项
系统。这是一个更复杂的话题,所以我将在这里指出我发现的一个很好的资源:
老实说,
subview with tag
无论如何都是穷人的工具。没有充分的理由使用标签。使用SwiftUI,您必须开始以不同的方式思考。视图总是只读的。如果需要更改某些内容,请以body
正确生成新UI的方式更改数据。