我希望能够在我的一个视图上按下按钮时显示一个新视图。
从我看过的教程和这里的其他回答问题来看,似乎每个人都在导航视图中使用导航按钮,除非我误认为导航视图是在我的应用程序顶部给我一个菜单栏右箭头的那个,所以我没有不想要那个。当我将导航按钮放在不是 NavigationView 子项的视图中时,它只是在 UI 上被禁用,我无法单击它,所以我想我不能使用它。
我见过的其他示例似乎使用了演示链接/按钮,它们似乎显示了一种弹出式视图。
我只是在寻找如何单击一个常规按钮并显示另一个全屏视图,就像在旧的做事方式中执行 segue 一样。
我正在实现一个非常自定义的NavigationLink MenuItem,它想在整个项目中重复使用。这是一个符合View和实现的结构,var body : some View其中包含NavigationLink。我需要以某种方式将将要呈现的视图存储NavigationLink在主体中,MenuItem但尚未这样做。
我destinationView在MenuItem的主体中定义为,some View并尝试了两个初始化方法:
这似乎太简单了:
struct MenuItem: View {
private var destinationView: some View
init(destinationView: View) {
self.destinationView = destinationView
}
var body : some View {
// Here I'm passing destinationView to NavigationLink...
}
}
Run Code Online (Sandbox Code Playgroud)
->错误:由于协议“视图”具有“自身”或相关类型要求,因此只能用作通用约束。
第二次尝试:
struct MenuItem: View {
private var destinationView: some View
init<V>(destinationView: V) where V: View {
self.destinationView = destinationView …Run Code Online (Sandbox Code Playgroud) PresentationButton可以正确显示视图,但是在单击“取消”以返回到父视图时,该按钮拒绝再次显示子视图。
这是我的PresentationButton代码:
struct ContentView : View {
var body: some View {
ZStack {
PresentationButton(Text("Click to show"), destination: SomeOtherView())
.transition(.slide)
}
}
}
Run Code Online (Sandbox Code Playgroud) 我大家!我花了几个小时寻找一些我认为非常简单的东西,但我无法找到最好的方法......我有我的身体视图:
var body: some View {
VStack {
// The CircularMenu
CircularMenu(menuItems: homeMenuItems, menuRadius: 55, menuButtonSize: 55, menuButtonColor: .black, buttonClickCompletion: buttonClickHandler(_:))
.buttonStyle(PlainButtonStyle())
}
}
Run Code Online (Sandbox Code Playgroud)
其中包含一个圆形菜单。每次单击菜单项都会调用:
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")
}
}
Run Code Online (Sandbox Code Playgroud)
我想执行一个简单的视图转换到另一个名为“汽车”的视图。nextView函数如下所示:
func nextView(destination: DestinationViewType) {
switch destination {
case .car: Car()
} …Run Code Online (Sandbox Code Playgroud)