Японский текст остается в SwiftUI TextField после очистки связанной строкиIOS

Программируем под IOS
Ответить
Anonymous
 Японский текст остается в SwiftUI TextField после очистки связанной строки

Сообщение Anonymous »

У меня возникла проблема, из-за которой символы японской хираганы остаются видимыми в TextField даже после того, как базовая строка @Binding установлена пустой.
  • Введите символы хираганы в TextField.
  • Нажмите «Готово», чтобы подтвердить ввод.
  • Нажмите «Готово». кнопка "X", которая выполняет text = "".
  • Текст остается видимым в TextField, хотя само значение @Binding пусто.
Интересно, что это происходит только с Хираганой. Если я преобразую текст в кандзи или катакану перед очисткой, он исчезнет, как и ожидалось.
Текст, который я удалил, все еще отображается.
Среда:
  • Xcode 26.2
  • iOS 26.2
Минимальный воспроизводимый пример

Код: Выделить всё

import SwiftUI

struct UserSearchField: View {
@Binding var text: String
let placeholder: String

@FocusState private var isFocused: Bool

var body: some View {
HStack(spacing: 8) {
Image(systemName: "magnifyingglass")
.font(.system(size: 14))
.foregroundStyle(.gray)
.padding(.leading, 12)

ZStack(alignment: .leading) {
if text.isEmpty {
Text(placeholder)
.foregroundStyle(.gray)
}

TextField("", text: $text)
.font(.body)
.foregroundStyle(.primary)
.focused($isFocused)
.submitLabel(.done)
}

if !text.isEmpty {
Button {
// This should clear the text, but Hiragana persists
text = ""
} label: {
Image(systemName: "xmark.circle.fill")
.foregroundStyle(.gray)
}
.padding(.trailing, 12)
}
}
.frame(height: 44)
.background(
RoundedRectangle(cornerRadius: 8)
.fill(Color(.systemBackground))
)
.overlay(
RoundedRectangle(cornerRadius: 8)
.stroke(Color.gray.opacity(0.4), lineWidth: 1)
)
}
}

struct ContentView: View {
@State private var searchText = ""

var body: some View {
NavigationStack {
VStack(spacing: 24) {
Text("Searcher")
.font(.headline)

UserSearchField(
text: $searchText,
placeholder: "Search by keyword"
)

Text("Result: \(searchText)")
.font(.caption)
.foregroundStyle(.secondary)

Spacer()
}
.padding()
.navigationTitle("Home")
}
}
}

#Preview {
ContentView()
}
Вопрос:
Есть ли способ программно заставить TextField очистить буфер IME без ручного переключения фокуса, или это известная ошибка SwiftUI?


Подробнее здесь: https://stackoverflow.com/questions/798 ... und-string
Ответить

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

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

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

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

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