SwiftUI 键盘工具栏有条件

问题描述 投票:0回答:2

不确定这是否是一个错误,或者我是否做错了什么,但如果我使用:

.toolbar {
    ToolbarItemGroup(placement: .navigationBarLeading) {
        if isFocused == .zipCode {
            Text("Test")
        }
    }
}

当 zipCode 字段获得焦点时,我的文本就会显示。但是,如果我做同样的事情但使用placement: .keyboard则不会,除非我还提供如下所示的附加视图:

.toolbar {
    ToolbarItemGroup(placement: .keyboard) {
        if isFocused == .zipCode {
            Text("Test")
        }
        Text("Default")
    }
}

如果我这样做,我会在每个键盘上看到“默认”一词,然后在我的邮政编码字段上,键盘变为数字键盘,显示“默认测试”。

我正在尝试仅将键盘工具栏项添加到数字键盘。我尝试将条件修改为 TextField.keyboardType == .numberPad 但你不能这样做,我也无法让 UIKeyboardType == .numberPad 工作。

此表单有多个字段,我只想在显示数字键盘时添加一个按钮。如果显示其他键盘类型,我不想添加任何内容。

这是针对 iOS 15 的 SwiftUI(最新)。

ios button swiftui toolbar
2个回答
1
投票

.keyboard 工具栏总体上是有问题的。请参阅:SwiftUI 中的重复工具栏
对于你的问题,这可行,但我想你想要按钮......

    .toolbar {
        ToolbarItemGroup(placement: .keyboard) {
            Text(isFocused == .zipCode ? "ZIP" : "")
        }
    }

0
投票

我不确定您是否找到了解决方案,但这似乎适用于 iOS 17.5。

@FocusState private var focusField: Field?

if focusField == .zipcode {
    ToolbarItemGroup(placement: .keyboard) {
        Spacer()
                
        Button(role: .none) {
            focusNextField()
        } label: {
            Text("next")
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.