swiftui - 在没有导航链接的情况下更改 View SwiftUI

标签 swiftui segue swiftui-navigationlink

我大家!我花了几个小时寻找我认为非常简单的东西,但我无法找到最好的方法...... 我有我的 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 行。 那么有人知道如何实现吗?非常感谢!

最佳答案

这是一种方法:

创建一个名为 IdentifiableViewstruct,它包含一个 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/

相关文章:

swift - 如何在 SwiftUI 列表中显示 Realm 结果?

ios - 在 custom-Cell TableView 中选择了哪个 TextField?

SwiftUI 列表 onTapGesture 覆盖了 NavigationLink

swift - 确定交互式 TableView 标题中的节索引

swiftui - 自定义 NavigationLink 以具有标题并对齐箭头?

NavigationUI中的SwiftUI自定义动画过渡?

ios - SwiftUI:如何调整 UIViewRepresentable 输出的大小?

swiftui - 为什么我不能强制打开我的 $string 以用作 TextField 值?

OSX 中的 SwiftUI 自定义文本字段

ios - 通过 Root View Controller 传递对象