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

问题描述

我的应用程序中有一个“我的个人资料”表单。在表单中,我有一些按钮。其中有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,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))
    }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)