【问题标题】:SwiftUI - NavigationLink is not working with a buttonSwiftUI - NavigationLink 无法使用按钮
【发布时间】:2020-12-29 13:11:35
【问题描述】:

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

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

【问题讨论】:

    标签: swiftui swiftui-navigationview


    【解决方案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)")
            }
        })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-11
      • 1970-01-01
      • 2020-04-16
      • 2020-07-25
      • 1970-01-01
      • 2020-02-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多