标签: swiftui-navigationlink

SwiftUI:单击按钮时如何显示视图?

我正在尝试使用 Apple 的SwiftUI制作一个应用程序,我需要有两个按钮在List一行中显示两个不同的视图。

我使用Xcode beta 7MacOS Catalina beta 7。我试图添加一个Button呈现视图但是,我无法点击它,当我尝试在一个简单的Button外部List并点击它时,该AddList()视图没有出现。我也试过添加一个navigationButton内部,navigationButton但它也不起作用。tapAction单击它时添加一个也不起作用,视图仍然没有出现

NavigationView {
            List(0..<5) { item in
                NavigationLink(destination: ContentOfList()) {
                    Text("hello") // dummy text
                    Spacer()
                    Text("edit")
                        .tapAction {
                            AddList() // This is the view I want to present
                    }
                }
                }.navigationBarItems(trailing: NavigationLink(destination: AddList(), label: { // doesn't work within navigationBarItems
                    Image(systemName: "plus.circle.fill")
                }))
        }

Run Code Online (Sandbox Code Playgroud)

我希望AddList()视图出现,但在这两种情况下,它没有。

swift swiftui swiftui-navigationlink

6
推荐指数
2
解决办法
2万
查看次数

SwiftUI NavigationLink 立即导航回来

我用来在 NavigationView 中SwiftUI创建从行到详细视图(类似于教程https://developer.apple.com/tutorials/swiftui/building-lists-and-navigationNavigationLinks中所做的操作)。但是,当我在应用程序中进行测试时,NavgiationLink 在被点击后立即从详细视图导航回上一个视图(详细视图仅显示一秒钟)。

这是代码:

struct ItemsView: View {
    var body: some View {
        NavigationView {
            VStack {
                List {
                    ForEach(Query.items) { item in
                        NavigationLink(destination: ItemDetail(item: item)) {
                            ItemRow(item: item)
                        }
                    }
                }
                Spacer()
            }
            .navigationBarTitle(Text("Items"))
        }
    }
}

private struct ItemRow: View {
    var item: Item

    var body: some View {
        VStack(alignment: .leading) {
            Text(item.title)
                .font(.headline)
            item.completionDate.map({
                Text("Created \($0.shortDateTime)")
            })
            item.completionDate.map({
                Text("Active \(Date().offsetString(from: $0)) ago")
            })
        }
    }
}

struct ItemDetail: View {
    var …
Run Code Online (Sandbox Code Playgroud)

navigation realm swiftui ios-navigationview swiftui-navigationlink

6
推荐指数
1
解决办法
1890
查看次数

在 NavigationView 的 SwiftUI 列表中设置雪佛龙的颜色

我有一个 NavigationView 列表。
在黑暗模式下,雪佛龙(红色圆圈)几乎不可见。

在此处输入图片说明 如何在列表中设置雪佛龙的颜色。

struct ContentView: View {
    var body: some View {
      NavigationView{
        List {
          Line(text: "Line 1")
          Line(text: "Line 2")
          Line(text: "Line 3",selected: true)
          Line(text: "Line 4")
          Line(text: "Line 5")
        }
      }
    }
}

struct Line: View {
  var text :String
  var selected = false
  @Environment(\.colorScheme) var colorScheme

  var body: some View {
    NavigationLink(destination: Text("D")) { Text(text)}
      .listRowBackground(selected ? Color.blue : Color(.systemBackground))
      .foregroundColor(selected ? Color.white : Color(.label))
    .onTapGesture(perform: {print ("tap")
    } )
  }
}
Run Code Online (Sandbox Code Playgroud)

swiftui swiftui-navigationlink

6
推荐指数
1
解决办法
799
查看次数

NavigationLink 查看参数 SwiftUI

当我在视图中调用 NavigationImageView 时,我想在每次调用中发送不同的视图,这样我就可以导航不同的视图。但问题是如何在 NavigationLink 中发送视图参数。我尝试了 View 和 UIView 但它给了我错误。

struct NavigationImageView: View {
    
    var item : Store
    var destinationView: View
    
    var body: some View {
        
        NavigationLink(destination:destinationView ) {
            
            Image(uiImage: (item.banner?.url)!.load())
                .resizable()
                .aspectRatio(CGFloat((item.banner?.ratio)!), contentMode: .fit)
                .cornerRadius(12)
                .shadow(radius: 4)
                .frame(width: CGFloat(UIScreen.main.bounds.width * 0.9), height: CGFloat((UIScreen.main.bounds.width / CGFloat((item.banner?.ratio) ?? 1))))
            
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

swiftui swiftui-navigationlink

6
推荐指数
1
解决办法
2068
查看次数

当我通过单击后退按钮导航回视图时,.onAppear 正在调用

我有两个用 swiftUI 编写的视图,例如 ViewA 和 ViewB。ViewA 的 nonAppear() 有一个 apiCall,它在最初加载视图时调用。\n我使用导航链接从 ViewA 导航到 ViewB 并单击 ViewB 中的后退按钮ViewA 的 onAppear() 被调用。

\n

\xe2\x80\xa2 从视图导航回来时有什么方法可以停止调用 onAppear()

\n

\xe2\x80\xa2 我正在 swiftUI 中寻找 UIKit 中类似“ViewDidLoad”的东西\n给定我的代码示例

\n
struct ContentView: View {\n    var body: some View {\n        NavigationView{\n            List(viewModel.list){ item in\n               NavigationLink(\n                destination: Text("Destination"),\n                label: {\n                    Text(item.name)\n                })\n            }\n            .onAppear{\n                viewModel.getListApiCall()\n            }\n     \n        }\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

swiftui swiftui-navigationlink

6
推荐指数
1
解决办法
4919
查看次数

文本字段点击正在取消 SwiftUI 中的导航链接

我在使用 SwiftUI 时遇到文本字段和导航视图/链接的奇怪问题

我所做的就是使用导航链接浏览视图,并且目标视图内有一些文本字段。当我点击其中任何一个时,导航会自动关闭。

当点击文本字段并显示键盘时,如何修复导航链接消失的问题?

var emailLoginButton: some View {
    NavigationLink(destination: LoginView(viewModel: .init(mode: .login, isPushed: $viewModel.authViewPushed)), isActive: $viewModel.authViewPushed) {
        Button(action: { viewModel.authViewPushed = true }) {
            HStack {
                Image(systemName: "envelope")
                    .resizable()
                    .aspectRatio(contentMode: .fit)
                    .frame(width: 20, height: 20)
                    .foregroundColor(.white)
                
                Text("continue_with_email".localized())
                    .padding(.horizontal, 20)
            }
        }
        .padding()
        .frame(maxWidth: .infinity)
        .foregroundColor(.white)
        .background(Capsule().fill(Color.primaryPurple))
        .shadow(color: Color.black.opacity(0.15), radius: 5, x: 5, y: 5)
        .padding(.horizontal)
        .padding(.bottom, 20)
    }
    .isDetailLink(false)
}

// Destination's view textfield which "dismisses" navigationLink
var emailTextField: some View {
    HStack {
        Image(systemName: "envelope")
            .font(.title2)
            .foregroundColor(.primary) …
Run Code Online (Sandbox Code Playgroud)

textfield ios swift swiftui swiftui-navigationlink

6
推荐指数
1
解决办法
1189
查看次数

在 SwiftUI 中,如何避免在从子视图更新共享状态数据时重绘父视图以避免导航问题?

自 Xcode 12.5 以来,我看到很多“无法呈现。请提交错误”。console 登录 Xcode 控制台,我记得在 12.5 之前没有看到过。

当我NavigationLink从父视图导航到子视图,并且子视图中的逻辑更新父视图所依赖的状态之一时,会显示此消息。

下面是一个示例伪代码,其中消息列表显示在父视图中,消息详细信息显示在列表的子视图中,最后是独立设置子视图。

struct MessageListView: View {
    ...
    @StateObject var messageList = MessageList()

    var body: some View {
        debugPrint("!!MessageListView has been redrawn!!")
        return VStack {
            NavigationLink(destination:SettingsView()){
                Text("Go to settings")
            }
            ForEach(messageList.data.sorted(by: {$0.key < $1.key}), id:\.key) { k, m in
                NavigationLink(destination:MessageView(message:...){
                    Text(m.text)
                }
            }
        }
    }
}

struct MessageView: View {
    ...
    @ObservedObject var messageList : MessageList
    @ObservedObject var message : Message
    ...
    var body: some View {
        Text(...)
        .onAppear { …
Run Code Online (Sandbox Code Playgroud)

xcode swift swiftui swiftui-navigationlink swiftui-navigationview

6
推荐指数
1
解决办法
1867
查看次数

SwiftUI:当 List 和 ForEach 嵌入 TabView 时,WatchOS 8.1 中的 NavigationView 错误

下面的代码在 WatchOS 7 和 8.0 中运行良好,但现在在 8.1 中,点击该行将导航到目的地,但随后立即导航回根视图。

我提交了反馈#FB9727188,并包含以下内容来演示该问题。

struct ContentView: View {

 @State var tabIndex:Int = 0

    var body: some View {
            TabView(selection: $tabIndex) {
            ListView()
                .tabItem { Group{
                    Text("List")
                }}.tag(0)
                .padding(.bottom, 1.0)
             Text("Second View")
                .tabItem { Group{
                    Text("Second")
                }}.tag(1)
            .padding(.bottom, 1.0)
             Text("Third View")
                .tabItem { Group{
                    Text("ThirdView")
                }}.tag(2)
           
        
            
        }
    }
}


struct ListView: View {
    var body: some View {
         List {
            ForEach((1...10).reversed(), id: \.self) {_ in
                NavigationLink(destination: Text("test")) {
                    Text("Tap Me but we'll just be back here") …
Run Code Online (Sandbox Code Playgroud)

apple-watch swiftui swiftui-navigationlink watchos-8

6
推荐指数
1
解决办法
927
查看次数

如何在 SwiftUI 中完全禁用 NavigationLink 的内容突出显示?

        NavigationLink(destination: DetailView()) {
            Image(systemName: "cloud.heavyrain")
                .foregroundColor(Color.accentColor)
                .font(.system(size: 66, weight: .regular))
        }
        .buttonStyle(PlainButtonStyle())
Run Code Online (Sandbox Code Playgroud)

在此示例中,.buttonStyle(PlainButtonStyle()) 修饰符将突出显示更改为非常温和但仍然可见的效果。

swift navigationview swiftui swiftui-navigationlink

6
推荐指数
1
解决办法
1268
查看次数

如何在每个选择更改的 NavigationSplitView 详细信息上运行“task”或“onAppear”?

我试图NavigationSplitView与其中DetailView包含taskor 的a 一起使用onAppear,但它似乎只运行一次。

enum MenuItem: String, Hashable, Identifiable, CaseIterable {
    case menu1
    case menu2
    case menu3
    case menu4
    case menu5
    
    var id: String { rawValue }
}

struct ContentView: View {
    @State var selection: MenuItem?
    
    var body: some View {
        NavigationSplitView {
            List(MenuItem.allCases, selection: $selection) { item in
                NavigationLink(value: item) {
                    Text(item.rawValue)
                }
            }
        } detail: {
            if let selection {
                DetailView(menuItem: selection)
            } else {
                Text("Default")
            }
        }
    }
}

struct …
Run Code Online (Sandbox Code Playgroud)

swiftui swiftui-navigationlink swiftui-navigationsplitview

6
推荐指数
2
解决办法
966
查看次数