更改视图而不使用导航链接SwiftUI
我爱所有人!我花了几个小时寻找一些我认为很简单的东西,但我无法找到最好的方法。。。 我有我的身体观:更改视图而不使用导航链接SwiftUI,swiftui,segue,swiftui-navigationlink,Swiftui,Segue,Swiftui Navigationlink,我爱所有人!我花了几个小时寻找一些我认为很简单的东西,但我无法找到最好的方法。。。 我有我的身体观: var body: some View { VStack { // The CircularMenu CircularMenu(menuItems: homeMenuItems, menuRadius: 55, menuButtonSize: 55, menuButtonColor: .black, buttonC
var body: some View {
VStack {
// The CircularMenu
CircularMenu(menuItems: homeMenuItems, menuRadius: 55, menuButtonSize: 55, menuButtonColor: .black, buttonClickCompletion: buttonClickHandler(_:))
.buttonStyle(PlainButtonStyle())
}
}
它包含一个循环菜单。每次单击菜单项都会调用:
func buttonClickHandler(_ index: Int) {
/// Your actions here
switch index {
//Thermometer
case 0:
print("0")
//Light
case 1:
print("1")
//Video
case 2:
print("2")
//Alarm
case 3:
print("3")
//Car
case 4:
self.destinationViewType = .car
self.nextView(destination: .car)
default:
print("not found")
}
}
我想执行一个简单的视图转换到另一个名为Car的视图。nextView函数如下所示:
func nextView(destination: DestinationViewType) {
switch destination {
case .car: Car()
}
}
我认为这很简单,但我得到了:在案例行中未使用“Car”初始值设定项的结果。
所以有人知道如何做到这一点?提前多谢 如果要用新视图完全替换主体内容,则需要一些条件。假设您有一个带有主体的容器,如果创建了汽车视图,我们将显示它: 结构容器:视图{ @State var car:car?//可选car视图的存储 var body:一些观点{ 如果let car=car{//如果存在car视图 car//返回car视图 }else{//否则返回循环菜单 VStack{ CircularNumenuItems:homeMenuItems,menuRadius:55,menuButtonSize:55,menuButtonColor:.黑色,buttonClickCompletion:buttonClickHandler\ .ButtonStyle纯ButtonStyle } } } ... 然后我们只需要在单击时指定新创建的汽车视图实例: ... func buttonClickHandler_uu索引:Int{ 开关指数{ .... //汽车 案例4: car=car//分配新创建的实例 ... } } }
我知道你提到了destinationViewTyp和其他一些案例。因此,您的代码将比这稍微复杂一些,但想法保持不变。我们存储一个视图或一些信息来帮助我们在必要时创建视图,然后根据条件返回选择器或视图。如果您想用新视图完全替换正文内容,您需要一些条件。假设您有一个带有主体的容器,如果创建了汽车视图,我们将显示它: 结构容器:视图{ @State var car:car?//可选car视图的存储 var body:一些观点{ 如果let car=car{//如果存在car视图 car//返回car视图 }else{//否则返回循环菜单 VStack{ CircularNumenuItems:homeMenuItems,menuRadius:55,menuButtonSize:55,menuButtonColor:.黑色,buttonClickCompletion:buttonClickHandler\ .ButtonStyle纯ButtonStyle } } } ... 然后我们只需要在单击时指定新创建的汽车视图实例: ... func buttonClickHandler_uu索引:Int{ 开关指数{ .... //汽车 案例4: car=car//分配新创建的实例 ... } } }
我知道你提到了destinationViewTyp和其他一些案例。因此,您的代码将比这稍微复杂一些,但想法保持不变。我们存储一个视图或一些信息,在必要时帮助我们创建一个视图,然后根据条件返回一个选择器或视图。这里有一种方法: 创建名为IdentifiableView的结构,该结构包含AnyView和id: 创建@State变量以保存下一个视图。使用.fullScreenCoveritem:显示下一个视图 然后,将self.nextView指定为可识别视图: 返回菜单视图时,请使用self.presentationMode.wrappedValue.disclose关闭视图。以下是最小汽车视图的示例:
这里有一种方法: 创建名为IdentifiableView的结构,该结构包含AnyView和id: 创建@State变量以保存下一个视图。使用.fullScreenCoveritem:显示下一个视图 然后,将self.nextView指定为可识别视图: 返回菜单视图时,请使用self.presentationMode.wrappedValue.disclose关闭视图。以下是最小汽车视图的示例:
这是否回答了您的问题?谢谢,但此方法使用navigationlink。我不想使用它。在哪一行代码中找到了NavigationLink@Silvering是否提供我的答案以寻求帮助?这是否回答了您的问题?谢谢,但此方法使用navigationlink。我不想使用它。在哪一行代码中找到了NavigationLink@Silvering帮了我的忙吗?非常感谢Denis。你的解决方案非常有效!谢谢你,丹尼斯。你的解决方案非常有效!非常感谢@vacawama。你的解决方案非常有效!!我认为你的解决方案是最好的。非常感谢各位,我非常欣赏vacawama的银行。你的解决方案非常有效!!我认为你的解决方案是最好的。非常感谢各位,我很感激
struct IdentifiableView: Identifiable {
let view: AnyView
let id = UUID()
}
@State private var nextView: IdentifiableView? = nil
var body: some View {
VStack {
// The CircularMenu
CircularMenu(menuItems: homeMenuItems, menuRadius: 55, menuButtonSize: 55, menuButtonColor: .black, buttonClickCompletion: buttonClickHandler(_:))
.buttonStyle(PlainButtonStyle())
}.fullScreenCover(item: self.$nextView, onDismiss: { nextView = nil}) { view in
view.view
}
}
case .car: self.nextView = IdentifiableView(view: AnyView(Car()))
struct Car: View {
@Environment(\.presentationMode) var presentationMode: Binding<PresentationMode>
var body: some View {
Text("Car View").onTapGesture {
self.presentationMode.wrappedValue.dismiss()
}
}
}