有没有一种方法可以通过.searchable修饰符判断搜索栏是否处于活动状态



举一个下面的例子,我想知道用户是否点击了搜索栏,它是否处于活动状态。出于性能原因,我想这样做,当第一个字符输入到一个巨大的列表中时,SwiftUI列表非常滞后(是的,我已经知道.id(UUID())技巧,仍然滞后(。我希望搜索一激活,列表就为空。

对于iPhone来说,这通常意味着键盘是可见的,但这并不可靠,键盘可能由于另一个原因而处于活动状态,或者我们可能在带有物理键盘的iPad上。

EditMode有一个环境变量来判断用户当前是否正在编辑列表,但我在搜索栏中找不到类似的内容。是否存在类似的情况,或者是否有检测方法?

import SwiftUI
import LoremSwiftum
let words = Lorem.words(50000).components(separatedBy: " ")
struct ContentView: View {

@State var searchText = ""

var searchedWords: [String] {
//I would like something like !searchActive ? words : ...
searchText.isEmpty ? [] : Array(words.filter { $0.localizedCaseInsensitiveContains(searchText) }.prefix(50))
}

var body: some View {
NavigationView {
List {
ForEach(searchedWords.indices, id:.self) { i in
Text(searchedWords[i])
}
}
.id(UUID())
.searchable(text: $searchText, placement: .navigationBarDrawer(displayMode: .always))
}
}
}

因此环境值为isSearching。不太容易使用,因为属性的声明必须在可搜索的视图的子视图中。

最新更新