ios 当操作修改视图条件时,按钮不重复

zzlelutf  于 12个月前  发布在  iOS
关注(0)|答案(1)|浏览(90)

我用下面的代码实现了一个自定义步进器:

struct ContentView: View {
    
    @State private var count: Int? = 0
    
    var body: some View {
        HStack {
            if let amount = count {
                Button {
                    count = amount - 1
                } label: {
                    Image(systemName: "minus")
                        .symbolVariant(.circle.fill)
                        .symbolRenderingMode(.palette)
                        .foregroundStyle(.background, .tint)
                }
                
                Text(amount.formatted())
                    .monospacedDigit()
                    .fixedSize()
                
                Button {
                    count = amount + 1
                } label: {
                    Image(systemName: "plus")
                        .symbolVariant(.circle.fill)
                        .symbolRenderingMode(.palette)
                        .foregroundStyle(.background, .tint)
                }
            }
        }
        .buttonRepeatBehavior(.enabled)
    }
}

字符串
我希望当我按下其中一个按钮时,计数器会重复地增加或减少。然而,它只增加或减少一次。也就是说,如果我将count设置为非可选,并更改操作以直接修改它,则一切都会按预期工作
在我的应用程序中,我的数据模型比能够重构条件更复杂,那么我如何才能做到这一点呢?
我已经尝试过为每个按钮分配一个静态id,但没有用

7d7tgy0s

7d7tgy0s1#

if中的视图提取到另一个视图:

struct MyStepper: View {
    @Binding var amount: Int
    
    var body: some View {
        Button {
            amount -= 1
        } label: { ... }
        
        Text(...)
        
        Button {
            amount += 1
        } label: { ... }
    }
}

字符串
ContentView中,您可以从count获得一个非可选的绑定,如下所示:

HStack {
    if let amount = Binding($count) {
        MyStepper(amount: amount)
            .buttonRepeatBehavior(.enabled)
    }
}

相关问题