为什么按钮内部的NavigationLink可以工作,而在SwiftUI中却不能工作



在SwiftUI中,如果在按钮中嵌入NavigationLink,则单击该按钮将触发按钮的操作和导航。

struct LoginView: View {
@StateObject private var viewModel = LoginViewModel()
Button(action: viewModel.doLogin, label: {
NavigationLink(value: viewModel.userInfo) {
Text("Log in")
}
.buttonStyle(.plain)
})
.buttonStyle(.plain)
}

然而,相反只会触发按钮的动作。为什么?

struct LoginView: View {
@StateObject private var viewModel = LoginViewModel()
NavigationLink(value: viewModel.userInfo) {
Button(action: viewModel.doLogin, label: {
Text("Log in")
})
.buttonStyle(.plain)
}
.buttonStyle(.plain)
}

创建Button时,它在初始化程序中使用label:参数,在本例中,该参数为类型视图。

所以屏幕上显示的是label

在第一种情况下,标签是NavigationLink,单击它执行导航。

在第二种情况下,NavigationLink具有label参数,该参数显示Button,并且由于样式的原因,它完全隐藏导航链接区域,而不是使用Text视图

所以答案是,NavigationLink根本不会被点击,因为它完全隐藏在Button下面。

相关内容

  • 没有找到相关文章

最新更新