假设我们有以下两个文本字段的视图:
struct ContentView: View {
@State private var first = ""
@State private var second = ""
var body: some View {
VStack {
TextField("First", text: $first)
.toolbar {
ToolbarItem(placement: .keyboard) {
Button("Test") { }
}
}
TextField("Second", text: $second)
}
}
}
toolbar
修饰符只应用于“第一个”文本字段,因此我期望它只在“第一个”文本字段处于焦点时才显示在键盘上,但实际上,它在“第二个”文本字段处于焦点时也会显示。
这是预期的行为吗?如果是,我如何为不同的文本字段使用不同的键盘工具栏?
2条答案
按热度按时间iszxjhcz1#
到目前为止,我发现的唯一解决这个问题的方法是有效的,但感觉不太对,它还会在控制台中生成一些布局约束警告。
如果将每个
TextField
Package 在NavigationView
中,则每个'TextField将有自己的上下文,因此也有自己的工具栏。大概是这样的
8qgya5xd2#
您可以定义一个
selection
变量,在选择TextField
时设置该变量。然后,在
.toolbar
中,您可以检查正在编辑的TextField
,然后显示相应的Button
。将其 Package 在
NavigationView
中确实有效,但也会导致布局问题。此解决方案在ForEach
循环中也有效。