我有一个简单的搜索列表:
struct ContentView: View {
@State var text:String = ""
var items = 1...100
var body: some View {
VStack {
List {
TextField("Search", text: $text)
Section{
ForEach(items.filter({"\($0)".contains(text)}),id: \.self){(i) in
Text("option \(i)")
}
}
}
}
}
}
如何在滚动超过2个单元格/几个点时关闭键盘?
6条答案
按热度按时间wbgh16ku1#
如果你使用的是
ScrollView
(可能也有List
,但我还没有确认),你可以使用UIScrollView
appearance
,这将影响所有的ScrollViews。mi7gmzs62#
对于this question,可以找到关于如何重新分配键盘的各种答案的详细讨论。
在列表中的拖动手势上重命名键盘的一个解决方案是使用UIApplication窗口上的方法,如下所示。为了更容易处理,我在UIApplication上创建了一个扩展,并为此扩展创建了视图修改器,最后是View的扩展:
因此,最后一个用于重新指定键盘的修饰符只是一个修饰符,必须像这样放置在列表中:
我还实现了一个纯swiftUI版本的搜索栏,您可能会感兴趣。你可以在这个答案中找到它。
v6ylcynt3#
至于现在,自iOS 16 beta以来,我们有一个新的修改器
scrollDismissesKeyboard()
,它允许做你需要的事情。在您的示例中,它应该看起来像
scrollDismissesKeyboard()
修饰符有一个确定解除规则的参数。以下是可能的值:.automatic
:根据滚动的上下文解除。.immediately
:一旦发生任何滚动,键盘将被关闭。.interactively
:键盘将随着用户的手势移动/消失。.never
:当用户滚动时,键盘永远不会消失。s2j5cfk04#
wecizke35#
@FocusState
wrapper沿着.focused()
TextField
modifier可能很有用。pvabu6sv6#