在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
下面。