[英]SwiftUI - NavigationLink is not working with a button
I am making an app where I take two number inputs and want to show the addition result of the numbers in the second screen, when a button is clicked.我正在制作一个应用程序,我在其中输入两个数字,并希望在单击按钮时在第二个屏幕中显示数字的加法结果。 I can print the result in the console, but unfortunately it seems like navigation link is not working, around the button.
我可以在控制台中打印结果,但不幸的是,按钮周围的导航链接似乎不起作用。 If I put NavigationLink around the button label instead of around the whole button, then, it goes to the second screen but button action stops working.
如果我将 NavigationLink 放在按钮标签周围而不是整个按钮周围,那么它会转到第二个屏幕,但按钮操作停止工作。 Here is my code:
这是我的代码:
import SwiftUI
struct ContentView: View {
@State private var number1 : String = ""
@State private var number2: String = ""
@State private var isTapped:Bool = false
@State var sum : Double = 0
var body: some View {
NavigationView {
VStack{
TextField("Type first number", text: $number1)
.keyboardType(.numberPad).padding()
.textFieldStyle(RoundedBorderTextFieldStyle())
.background(Color.gray).border(Color.blue,width:5)
TextField("Type second number", text: $number2)
.keyboardType(.numberPad).padding()
.textFieldStyle(RoundedBorderTextFieldStyle())
.background(Color.gray).border(Color.blue,width:5)
//this Navigationlink is not working
NavigationLink(destination: Text("\(self.sum)")) {
Button(action: {
print("I am here in the action")
self.isTapped.toggle()
UIApplication.shared.endEditing()
if let num1 = Double(self.number1), let num2 = Double(self.number2){
print("I am here")
self.sum = num1 + num2
print("\(self.sum)")
}
}) {
//If I put the Navigationlink here, button action stop working.
Text("Add Two Numbers")
.padding()
.foregroundColor(.blue)
.background( isTapped ? Color.orange : Color.gray)
.font(.title)
.border(Color.blue, width: 5)
.shadow(radius: 10)
}
}
}
}
}
}
extension UIApplication {
func endEditing() {
sendAction(#selector(UIResponder.resignFirstResponder), to: nil, from: nil, for: nil)
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
Any clue?有什么线索吗? Thanks for your curiosity.
谢谢你的好奇心。
NavigationLink
is itself a button, actually, so you introduce some kind of conflict.实际上,
NavigationLink
本身就是一个按钮,因此您引入了某种冲突。 Instead you can use link just with additional tap gesture handler, like相反,您可以仅使用带有附加点击手势处理程序的链接,例如
NavigationLink(destination: Text("\(self.sum)")) {
Text("Add Two Numbers")
.padding()
.foregroundColor(.blue)
.background(isTapped ? Color.orange : Color.gray)
.font(.title)
.border(Color.blue, width: 5)
.shadow(radius: 10)
}
.simultaneousGesture(TapGesture().onEnded{
print("I am here in the action")
self.isTapped.toggle()
UIApplication.shared.endEditing()
if let num1 = Double(self.number1), let num2 = Double(self.number2){
print("I am here")
self.sum = num1 + num2
print("\(self.sum)")
}
})
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.