我大家!我花了几个小时寻找我认为非常简单的东西,但我无法找到最好的方法...... 我有我的 body 观:
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")
}
}
我想执行一个简单的 View 转换到另一个名为 Car 的 View 。 nextView
函数如下所示:
func nextView(destination: DestinationViewType) {
switch destination {
case .car: Car()
}
}
我认为这很简单,但我得到:Result of 'Car' initializer is unused
在 case 行。
那么有人知道如何实现吗?非常感谢!
最佳答案
这是一种方法:
创建一个名为 IdentifiableView
的 struct
,它包含一个 AnyView
和一个 id
:
struct IdentifiableView: Identifiable {
let view: AnyView
let id = UUID()
}
创建一个 @State
变量来保存 nextView
。使用 .fullScreenCover(item:)
显示 nextView
@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
}
}
然后,将self.nextView
赋值给IdentifiableView
:
case .car: self.nextView = IdentifiableView(view: AnyView(Car()))
当返回到 MenuView
时,使用 self.presentationMode.wrappedValue.dismiss()
关闭 View 。下面是一个最小的 Car
View 示例:
struct Car: View {
@Environment(\.presentationMode) var presentationMode: Binding<PresentationMode>
var body: some View {
Text("Car View").onTapGesture {
self.presentationMode.wrappedValue.dismiss()
}
}
}
关于swiftui - 在没有导航链接的情况下更改 View SwiftUI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64088346/