2

我正在制作一个应用程序,我在其中输入两个数字,并希望在单击按钮时在第二个屏幕中显示数字的加法结果。我可以在控制台中打印结果,但不幸的是,按钮周围的导航链接似乎不起作用。如果我将 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()
    }
}

有什么线索吗?谢谢你的好奇心。

4

1 回答 1

5

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)")
        }
    })
于 2020-09-11T03:46:00.417 回答