SwiftUI - NavigationLink не работает с кнопкой
Я делаю приложение, в котором я беру два ввода чисел и хочу показать результат сложения чисел на втором экране при нажатии кнопки. Я могу распечатать результат в консоли, но, к сожалению, похоже, что ссылка для навигации не работает вокруг кнопки. Если я помещаю NavigationLink вокруг метки кнопки, а не вокруг всей кнопки, тогда он переходит на второй экран, но действие кнопки перестает работать. Вот мой код:
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()
}
}
Есть подсказка? Спасибо за любопытство.
1 ответ
Решение
NavigationLink
само по себе является кнопкой, поэтому вы вводите какой-то конфликт. Вместо этого вы можете использовать ссылку только с дополнительным обработчиком жестов касания, например
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)")
}
})