在SwiftUI中按钮上的点击手势随机响应

时间:2020-09-13 17:20:49

标签: swiftui gesture

我的应用程序中有一个“我的个人资料”表单。在表单中,我有一些按钮。其中有5个按钮用于显示自定义下拉菜单,以选择萨克斯,血统,国籍等。但是,当我有时点击这些按钮时,它们有时却没有响应。例如,如果我轻按它们10次,它们将响应2或3次。有时他们会长时间工作。我已经花了几天时间在此问题上,但是无法在我的代码中发现任何问题。有没有人遇到过这类问题?任何人都可以找出真正的问题是什么。顺便说一句,我应用程序中的所有其他按钮都可以正常工作。

My Profile form

这是图片中红色矩形中前三个按钮的代码

import SwiftUI

struct FormPartTwoView: View {
    @Binding var gender: String
    @Binding var blood: String
    @Binding var nationality: String
    
    @Binding var showingGenderPicker: Bool
    @Binding var showingBloodGroupPicker: Bool
    @Binding var showingNationalityPicker: Bool
    @ObservedObject var userProfile = UserProfileViewModel()
    @ObservedObject var userProfileUpdate = UserProfileUpdateViewModel()

    var body: some View {
        GeometryReader { geometry in
            HStack {
                Button(action: {
                    self.showingGenderPicker.toggle()
                    self.showingBloodGroupPicker = false
                    self.showingNationalityPicker = false
                }) {
                    VStack {
                        TextField("Gender", text: self.$gender)
                            .padding(.horizontal)
                            .disabled(true)
                    }
                    .font(.system(size: 13))
                    .frame(height: 40)
                    .overlay(
                        RoundedRectangle(cornerRadius: 5)
                            .stroke(Color("Border2"), lineWidth: 1)
                    )
                }
                .buttonStyle(PlainButtonStyle())

                Button(action: {
                    self.showingBloodGroupPicker.toggle()
                    self.showingGenderPicker = false
                    self.showingNationalityPicker = false
                }) {
                    VStack {
                        TextField("Blood", text: self.$blood)
                            .padding(.horizontal)
                            .disabled(true)
                    }
                    .font(.system(size: 13))
                    .frame(height: 40)
                    .overlay(
                        RoundedRectangle(cornerRadius: 5)
                            .stroke(Color("Border2"), lineWidth: 1)
                    )
                }
                .buttonStyle(PlainButtonStyle())

                Button(action: {
                    self.showingNationalityPicker.toggle()
                    self.showingGenderPicker = false
                    self.showingBloodGroupPicker = false
                }) {
                    VStack {
                        TextField("Nationality", text: self.$nationality)
                            .padding(.horizontal)
                            .disabled(true)
                    }
                    .font(.system(size: 13))
                    .frame(height: 40)
                    .overlay(
                        RoundedRectangle(cornerRadius: 5)
                            .stroke(Color("Border2"), lineWidth: 1)
                    )
                }
                .buttonStyle(PlainButtonStyle())
            }
            .frame(width: geometry.size.width, height: 40)
        }
    }
}

struct FormPartTwoView_Previews: PreviewProvider {
    static var previews: some View {
        FormPartTwoView(gender: .constant(""), blood: .constant(""), nationality: .constant(""), showingGenderPicker: .constant(false), showingBloodGroupPicker: .constant(false), showingNationalityPicker: .constant(false))
    }
}

这是第二个拖曳按钮的代码:

import SwiftUI

struct FormPartFiveView: View {
    @Binding var district: String
    @Binding var upazila: String
    @Binding var postcode: String
    
    @Binding var showingUpazilaPicker: Bool
    @Binding var showingDistrictPicker: Bool
    @ObservedObject var userProfileUpdate = UserProfileUpdateViewModel()

    var body: some View {
        GeometryReader { geometry in
            HStack {
                Button(action: {
                    self.showingDistrictPicker.toggle()
                    self.showingUpazilaPicker = false
                }) {
                    VStack {
                        Text("\(self.district == "" ? "District" : self.district)")
                            .foregroundColor(self.district == "" ? Color.gray : Color.black)
                            .padding(.horizontal)
                    }
                    .font(.system(size: 13))
                    .frame(width: geometry.size.width/3.2, height: 40)
                    .overlay(
                        RoundedRectangle(cornerRadius: 5)
                            .stroke(Color("Border2"), lineWidth: 1)
                    )
                }
                .buttonStyle(PlainButtonStyle())
                Button(action: {
                    self.showingUpazilaPicker.toggle()
                    self.showingDistrictPicker = false
                }) {
                    VStack {
                        Text("\(self.upazila == "" ? "Upazila" : self.upazila)")
                            .foregroundColor(self.upazila == "" ? Color.gray : Color.black)
                            .padding(.horizontal)
                    }
                    .font(.system(size: 13))
                    .frame(width: geometry.size.width/3.2, height: 40)
                    .overlay(
                        RoundedRectangle(cornerRadius: 5)
                            .stroke(Color("Border2"), lineWidth: 1)
                    )
                }
                .buttonStyle(PlainButtonStyle())
                VStack {
                    TextField("Postcode", text: self.$postcode)
                        .padding(.horizontal)
                }
                .font(.system(size: 13))
                .frame(width: 100, height: 40)
                .overlay(
                    RoundedRectangle(cornerRadius: 5)
                        .stroke(Color("Border2"), lineWidth: 1)
                )
            }
            .frame(width: geometry.size.width, height: 40)
        }
    }
}

struct FormPartFiveView_Previews: PreviewProvider {
    static var previews: some View {
        FormPartFiveView(district: .constant(""), upazila: .constant(""), postcode: .constant(""), showingUpazilaPicker: .constant(false), showingDistrictPicker: .constant(false))
    }
}

0 个答案:

没有答案