Приведенный ниже код может быть скопирован/вставлен в новый Xcode, Swiftui Project, чтобы продемонстрировать проблему. В реальном приложении, что этот код демонстрирует, что он будет функционировать аналогично подкастам Apple, где значок поиска может быть нажат на начало поиска. а затем проведите вниз, чтобы отпустить клавиатуру.
[*] Анимация кажется неуклюжей, но хуже ...
Теперь нажмите кнопку снова, чтобы сосредоточить Textfield, и Search Text исчез, хотя поиск все еще применяется. Неверно, как спускается на клавиатуру, чтобы отказаться от этого, не достигает этого: < /p>
.onReceive(keyboardDidHide) { _ in
if isSearchFieldPresented {
isSearchFieldPresented = false
}
}
< /code>
Кто-нибудь знает плавный способ реализации такого поведения? import SwiftUI
struct AnimalView: View {
@State private var animals = [
Animal(name: "Cat"),
Animal(name: "Dog"),
Animal(name: "Elephant"),
Animal(name: "Lion"),
Animal(name: "Zebra")
]
@State private var searchText = ""
@State private var selectedAnimalID: UUID?
@State private var isSearchFieldPresented: Bool = false
var filteredAnimals: [Animal] {
searchText.isEmpty
? animals
: animals.filter { $0.name.localizedCaseInsensitiveContains(searchText) }
}
private let keyboardDidHide = NotificationCenter
.default
.publisher(for: UIResponder.keyboardDidHideNotification)
var body: some View {
VStack{
NavigationSplitView {
List(filteredAnimals, selection: $selectedAnimalID) { animal in
Text(animal.name)
}
.searchable(
text: $searchText,
isPresented: $isSearchFieldPresented
)
.textInputAutocapitalization(.never)
.autocorrectionDisabled(true)
.scrollDismissesKeyboard(.interactively)
.onReceive(keyboardDidHide) { _ in
if isSearchFieldPresented {
isSearchFieldPresented = false
}
}
} detail: {
if let id = selectedAnimalID,
let animal = animals.first(where: { $0.id == id }) {
Text("Selected: \(animal.name)")
} else {
Text("Select an animal")
}
}
Spacer()
Text("Is Presented: \(isSearchFieldPresented)")
Button("Activate Search", action: { isSearchFieldPresented = true })
}
}
}
struct ContentView: View {
var body: some View {
AnimalView()
}
}
class Animal: Identifiable {
let id = UUID()
let name: String
init(name: String) {
self.name = name
}
}
Подробнее здесь: https://stackoverflow.com/questions/796 ... -textfield
Swiftui .Searchable - Программно фокусировать поиск текстового поля текста ⇐ IOS
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Swiftui .Searchable - Программно фокусировать поиск текстового поля текста
Anonymous » » в форуме IOS - 0 Ответы
- 5 Просмотры
-
Последнее сообщение Anonymous
-