当前位置: 首页 > 知识库问答 >
问题:

我已经搜索和搜索SwiftUI切换情况菜单循环?

鲜于岳
2023-03-14

我想有开关情况循环我的九个菜单,在那里我可以在任何给定的一个和菜单跳转到下一个随机选择,现在它目前旋转的顺序,无论我在哪里点击。

import Foundation
import SwiftUI
import CoreData
import Combine
import PDFKit
import SceneKit
import WebKit
 
 
struct Cotharticren: App {
  var body: some Scene {
        WindowGroup {
            ContentView()
        }
  }
}
 
     struct Option: Hashable {
        
         let title: String
       
         let imageName: String
     }
 
struct ContentView: View {
 
    @State var currentOption = 0
    
    let options: [Option] = [
        .init(title: "DART Meadow", imageName: "sun.max.fill"),
        .init(title: "Research", imageName: "flame"),
        .init(title: "Navigation", imageName: "moon.stars.fill"),
        .init(title: "Shelf", imageName: "archivebox"),
        .init(title: "Chest" ,imageName: "shippingbox"),
        .init(title: "Crate" ,imageName: "bonjour"),
        .init(title: "Manufactoring", imageName: "gear"),
        .init(title: "Warehouse", imageName: "archivebox.fill"),
        .init(title: "Journal", imageName: "note.text"),
       
    ]
    
    var body: some View {
        VStack(alignment: .leading) {
        HStack(alignment: .top) {
        ScrollView( .vertical) {
        NavigationView{
            /*
            List(1..<9)
            {
                     Text("\($0)")
                }
            .listStyle(SidebarListStyle())
            }
 */
            ListView(options: options, currentSelection: $currentOption)
         
            //Text(systemName: myItem.selectedImageName) + Text(myItem.whateverText)
           
            switch (currentOption) {
            case 1:
                OrbitNodeView()
            case 2:
                ATM26NodeView()
            case 3:
                NozzleNodeView()
            case 4:
                EmptyView()
                VStack(alignment: .center) {
                Text("Chest")
                    .font(.largeTitle)
                    .bold()
                    .colorInvert()
                }
            case 5:
                EmptyView()
                VStack(alignment: .center) {
                Text("Crate")
               
                    .font(.largeTitle)
                    .bold()
                    .colorInvert()
                }
            case 6:
                EmptyView()
                    VStack(alignment: .center) {
                    Text("Manufactoring")
                    .font(.largeTitle)
                    .bold()
                    .colorInvert()
                    }
            case 7:
                EmptyView()
                        VStack(alignment: .center) {
                        Text("Warehouse")
                    .font(.largeTitle)
                    .bold()
                    .colorInvert()
                        }
            case 8:
                   VStack(alignment: .center) {
                    Text("Journal")
                    .font(.largeTitle)
                    .bold()
                    .colorInvert()
                    .padding(.top, 60)
                       
                       Image("articrenmeadowopacity")
                           .shadow(radius: 3)
                    WebView()
                   
            }
            default:
                MainView()
           
            }
            
       }.background(Color.white)
       
        }
        
    }
        
        
        }
        Spacer()
    }
}
 
 
struct MainView: View {
 
    var body: some View{
        VStack(alignment: .leading) {
        HStack(alignment: .bottom) {
          
              
                Image("CotharticrenMainView")
                    .shadow(radius: 3)
   
        }
            }
        
        .frame(width: 900, height: 800, alignment: .center)
 
        Spacer()
        }
       
    }
  
 
 
 
struct ListView: View {
    let options: [Option]
    @Binding var currentSelection: Int
    var body: some View{
        
        
        VStack(alignment: .leading) {
        HStack(alignment: .top) {
            HStack(alignment: .top) {
                VStack(alignment: .trailing) {
            Circle()
                .stroke(Color.init(red: 0.9, green: 0.95, blue: 0.2, opacity: 1), lineWidth: 2)
                .alignmentGuide(HorizontalAlignment.myAlignment)
                                   { d in d[.leading] }
                .alignmentGuide(VerticalAlignment.myAlignment)
                                   { d in d[.bottom] }
                .frame(width: 50, height: 50)
                
                        Circle()
                            .stroke(Color.init(red: 0.25, green: 0.9, blue: 0.2, opacity: 1), lineWidth: 2)
                            .alignmentGuide(HorizontalAlignment.myAlignment)
                                               { d in d[.leading] }
                            .alignmentGuide(VerticalAlignment.myAlignment)
                                               { d in d[.bottom] }
                            .frame(width: 25, height: 25)
                            VStack(alignment: .leading) {
            Circle()
                .stroke(Color.init(red: 0.1, green: 0.1, blue: 1, opacity: 1), lineWidth: 2)
                .alignmentGuide(HorizontalAlignment.myAlignment)
                                   { d in d[.leading] }
                .alignmentGuide(VerticalAlignment.myAlignment)
                                   { d in d[.bottom] }
                .frame(width: 75, height: 75)
                }
                }
            }
            
            HStack(alignment: .top) {
        Image("DARTMeadowCSMwidthArtemis2by1")
               
            .shadow(radius: 3)
            .padding(.top, 10)
            }
                
            
            .padding(.top, 20)
 
        
        .padding(.trailing, 10)
        }.padding(.top, 20).padding(.leading, 10)
          
            HStack(alignment: .center) {
            VStack(alignment: .center) {
            
            Image("arrow300")
                HStack(alignment: .center) {
                Text("You've never plotted an Edge?")
                }
            }
            }.shadow(radius: 3)
 
        VStack(alignment: .leading) {
            let current = options[currentSelection]
            ForEach(options, id: \.self) {option in
                HStack {
                    
                    Image(systemName: option.imageName)
                        //.resizable()
                        //.aspectRatio(contentMode: .fit)
                        .frame(width: 20)
                    
                    Text(option.title)
                        .foregroundColor(current == option ? Color.blue : Color.white)
                   
                }
                .padding(8)
                
 
                .onTapGesture {
                    
                    currentSelection += 1
                    
                    if currentSelection == 9 {
                    currentSelection = 0
                    }
              }
            }
            Spacer()
        }.frame(width: 300, height: 800, alignment: .leading)
            
    }
        Spacer()
    }
        
}
 
 
 
 
struct WebView: View {
 
    var body: some View{
        VStack(alignment: .leading) {
        HStack(alignment: .bottom) {
          
              
                
   
                   
            }
        }
        .frame(width: 900, height: 800, alignment: .center)
 
        Spacer()
        }
       
    }

共有1个答案

关翰
2023-03-14

您可以将标识符添加到选项类中,并将其用于CurrentSelection,如果要设置选项,只需将CurrentSelection设置为Option.id:

另外:1:如果你想要答案,最好在发布代码之前对代码进行格式化(在Xcode中选择,Ctrl+我应该这样做),这样它就容易阅读和理解

2:一个最小的、可复制的示例不仅仅是发布您的全部代码,而是创建一个示例,该示例只包含显示您正在经历的问题所需的尽可能多的代码。我发布的代码将是一个更好的例子,它将工作而不必改变任何东西。您的代码包括对此处没有的对象的引用,因此可能的助手必须在测试您的问题之前删除这些引用

struct Option: Hashable, Identifiable {
    // Identifier for Option !! MUST be unique
    let id: Int
    let title: String
    let imageName: String
}

struct ContentView: View {
    @State var currentOption: Int = 0
    
    let options: [Option] = [
        .init(id: 1, title: "DART Meadow", imageName: "sun.max.fill"),
        .init(id: 2, title: "Research", imageName: "flame"),
        .init(id: 3, title: "Navigation", imageName: "moon.stars.fill"),
    ]
    
    var body: some View {
        GeometryReader { geo in
            HStack {
                ListView(options: options, currentSelection: $currentOption)
                    .frame(width: geo.size.width / 2, height: geo.size.height)
                switch (currentOption) {
                    case 1: Text("OrbitNodeView")
                    case 2: Text("ATM26NodeView")
                    case 3: Text("NozzleNodeView")
                    default: Text("MainView")
                }
            }
        }
    }
}


struct ListView: View {
    let options: [Option]
    @Binding var currentSelection: Int
    
    var body: some View{
        VStack(alignment: .leading) {
            ForEach(options, id: \.self) {option in
                HStack {
                    Image(systemName: option.imageName)
                        .frame(width: 20)
                    
                    Text(option.title)
                    // Don't even have to use current = options[currentSelection] anymore:
                        .foregroundColor(currentSelection == option.id ? .accentColor : .primary)
                }
                .padding(8)
                .onTapGesture {
                    // Set the currentSelection to the ID of the option
                    currentSelection = option.id
                }
            }
        }
    }
}
 类似资料:
  • 主要内容:Eclipse 搜索菜单Eclipse 搜索菜单 Eclipse 搜索对话框允许您在整个工作区、一组项目、特定项目或包资源管理器视图中选择的文件夹中搜索包含文字或字符模式的文件。 可以通过以下方式调用搜索对话框 : 单击“Search”菜单并选择“Search”或“File”或“Java”。 单击 Ctrl + H。 “File Search”页面允许您搜索任何类型的文件,但“Java Search”页面仅关注 Java

  • 搜索工作区 Eclipse搜索对话框允许您在包浏览器视图中搜索整个工作区,一组项目,特定项目或文件夹中包含文字或字符模式的文件。 可以通过以下方式调用搜索对话框: 单击“搜索”菜单并选择“搜索”或“文件”或“Java”。 单击Ctrl + H. “文件搜索”页面允许您搜索任何类型的文件,但“Java搜索”页面仅关注Java文件。 例如,要在Java搜索页面中搜索Person类型的用法 - 在sea

  • 我正在尝试为我的portlet创建一个搜索表单。portlet是一个地址簿应用程序,所有dao和服务都是使用service builder构建的。我想为用户提供一个基本/高级搜索表单(与liferay上的其他表单一样,例如control center中的“用户和组织”)。 我已经实现了所有的逻辑和页面,查看了Lifeay源代码(6.1 GA1),但搜索表单没有以任何方式显示,我将把代码放在这里。

  • 本文向大家介绍intellij-idea 使用情况搜索,包括了intellij-idea 使用情况搜索的使用技巧和注意事项,需要的朋友参考一下 示例 查找用法/在文件中查找用法 Windows / Linux:Alt++ F7/ Ctrl+F7 OS X / macOS:Option++ F7/ Ctrl+F7 突出显示文件中的用法 在Windows / Linux的:Ctrl+ Shift+F7

  • 按下 / 键,编辑器底部会出现 / 符号,接着输入字符串,便可以进行搜索 / 向下搜索 ? 向上搜索 n 搜索下一个 N 搜索上一个 :s/源字符串/目标字符串 将源字符串替换为目标字符串 :s/源字符串/目标字符串/g 替换当前行中所有符合条件的字符串 :行号1,行号2s/源字符串/目标字符串/g 在指定行中进行替换 :%s/源字符串/目标字符串/g 全文替换

  • 我有大量相同类型的实体,每个实体都有大量属性,并且我只有以下两种选择来存储它们: 将每个项存储在索引中并执行多索引搜索 将所有enties存储在单个索引中,并且只搜索1个索引。 一般而言,我想要一个时间复杂度之间的比较搜索“N”实体与“M”特征在上述每一种情况!