什么是在barButtonItem中使用SwiftUI的"pushViewController"的UIKit替代方案?

7

我正在使用SwiftUI开发一个非常简单的应用程序,已经成功创建了NavigationButton来跳转到DetailViewController。 我想在右上角添加一个“+”按钮来向我的List中添加内容:

navigationBarItems(trailing:
                    NavigationButton(destination: DetailVC()) {
                        Image(systemName: "plus")
                            .resizable()
                            .frame(width: 20, height: 20)
                    }
)

问题是当我点击按钮时,它不会导航到我的DetailVC页面。
我也尝试过这个:
.navigationBarItems(trailing:
                    PresentationButton(destination: DetailVC()) {
                        Image(systemName: "plus")
                            .resizable()
                            .frame(width: 20, height: 20)
                    }
)

使用这段代码的问题在于它没有展示一个"返回"按钮的DetailVC,而且它从底部显示出来,没有办法回到我的ContentView。

正确的方法是在导航栏中添加适当的项以正确导航。

谢谢,Nico


在第一个示例中,你的视图代码是否被包含在 NavigationView { ... } 中? - Matteo Pacini
是的。我有一个.navigationBarTitle(Text("Title"))和一个List。 - Vipera74
3个回答

7
在SwiftUI中,您可以使用NavigationButton来导航您的应用程序。
只需将您的替换为:
.navigationBarItems(trailing:
    NavigationButton(destination: DetailVC()) {
        Image(systemName: "plus")
            .resizable()
            .frame(width: 20, height: 20)
    }
)

苹果文档:

https://developer.apple.com/documentation/swiftui/navigationbutton(已弃用)

编辑:


NavigationButton已被弃用,不应再使用。

取而代之的是NavigationLink视图,它应该可以工作。这个结构体是新的,我还无法测试,但按钮本身的代码应该像这样:

NavigationLink(destination: DetailVC()) { }

苹果文档:

https://developer.apple.com/documentation/swiftui/navigationlink


该链接为苹果官方文档中关于SwiftUI中的NavigationLink的说明。

2
我尝试过这样做,但它没有呈现DetailVC。 - Vipera74
1
@Vipera74 这似乎是一个bug,因为当NavigationButton.navigationBarItems之外时它是可以工作的。 - swift-lynx
谢谢。这个问题会在官方发布时修复吗?还是他们会在之前上传一些更新? - Vipera74
@Vipera74,我对帖子进行了编辑。编辑应该已经解释清楚了。 - swift-lynx

1

我制作了一个示例来显示列表和详细信息。希望这个示例应用程序能够帮助你。

https://github.com/Shiju86/ListViewSwiftUI

没错,NavigationButton已经不再使用,取而代之的是苹果提供的NavigationLink。


0

NavigationLink应该是如何实现这一点的。然而,在iOS 13.2和13.3中,当在标题中使用时,它似乎出现了故障/不可靠(并且完全破坏了我的应用程序:我通过将NavigationLink移出标题并使其他东西成为模态框来找到了一个解决方法)。

在标准视图中,它的效果更好(但仍带有怪癖)。荒谬的是,您可能需要考虑使用模态框而不是子视图,因为那似乎真的起作用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接