Swiftui .Searchable - Программно фокусировать поиск текстового поля текстаIOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Anonymous
 Swiftui .Searchable - Программно фокусировать поиск текстового поля текста

Сообщение Anonymous »

Приведенный ниже код может быть скопирован/вставлен в новый 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «IOS»