Пользовательский цвет фона UITextField при редактировании - PullRequest
3 голосов
/ 08 мая 2020

Я пытаюсь задать цвет фона для UITextField с помощью SwiftUI, поскольку я пытаюсь использовать некоторые уникальные цвета в моем приложении для поддержки как LightMode, так и DarkMode.

My цвета всегда определяются как ColorSet в папке xcassets, и это код, который я сначала использовал для достижения этого цвета фона.

TextField("Exam title", text: $title)
    .padding()
    .background(Color("cardBackground"))
    .cornerRadius(8)

Таким образом я могу изменить цвет фона TextField когда я не использую . Вот как выглядит результат этого

Правильный вид

Проблема, с которой я столкнулся, заключается в том, что как только я нажимаю на TextField, он возвращается к своему цвету по умолчанию (Я думаю, что это значение по умолчанию), и я не могу это изменить.

При редактировании

Итак, я создал UIViewRepresentable реализацию TextField, возможно, это помогло бы мне намного больше, чем SwiftUI может сделать на данном этапе. Я не очень разбираюсь в UIKit, поэтому я действительно не знаю, как лучше всего решить эту проблему, а о таких проблемах мало что известно.

Вы сталкивались с чем-то подобным раньше? Как я могу решить эту проблему?

EDIT:

Если это может помочь, это иерархия представлений, когда TextField находится в режиме редактирования, а выбранные элементы, которые помещаются перед TextField, являются UIFieldEditor

UIFieldEditor

1 Ответ

1 голос
/ 16 мая 2020

сначала, не определяйте цвет фона в SwiftUI:
.background(Color("cardBackground")) / удалите эту строку кода

В методе makeUIView установите цвет фона по умолчанию, который используется, когда пользователь не касаясь текстового поля:

textfield.backgroundColor = .systemGray

Наконец, используйте эти методы в классе Coordinator для управления поведением цвета фона:

    func textFieldDidBeginEditing(_ textField: UITextField) {
        textField.backgroundColor = .red
    }

    func textFieldDidEndEditing(_ textField: UITextField, reason: UITextField.DidEndEditingReason) {
        textField.backgroundColor = .systemGray
    }
...