TextField в SwiftUI List имеет ошибку позиционирования курсора при редактировании строки экземпляра класса Core Data? - PullRequest
0 голосов
/ 17 апреля 2020

При редактировании текста в TextField, который находится в списке SwiftUI, возникает ошибка позиционирования курсора? Есть идеи как этого избежать? Смотрите видео и код прилагается.

Примечание. Не уверен, имеет ли это значение, однако gcTask является NSManagedObject (то есть экземпляром класса основных данных).

ОБНОВЛЕНИЕ: теперь подтверждено, что эта проблема напрямую связана со случаем, когда строковая переменная TextField связана с строковым атрибутом экземпляра класса Core Data. В этом случае данные ядра NSManagedClass GCTask имеют строковый атрибут «заголовок». Вот почему эта проблема возникает при использовании моих основных данных, и не возникает, если я просто использовал локальную строковую переменную @State?

Справочная информация: Желание иметь простой список дел с возможностью щелкать строку и редактировать ее, что вы видите в некоторых приложениях. Просто хочу понять, как это сделать в SwiftUI.

Код:

struct GCTaskRow : View {
    @ObservedObject var gcTask: GCTask
    @State var beingEdited : Bool = false

    var body: some View {
        HStack {
            Image(systemName: gcTask.completed ? "checkmark.square" : "square")
            .onTapGesture {
                self.gcTask.completed.toggle()
                GCCoreData.save()
            }

            VStack {
                TextField(
                    "Enter:",
                    text: $gcTask.title,
                    onEditingChanged: { changed in
                        print("\(self.gcTask.title)  => onEditingChanged = \(changed)")
                        self.beingEdited = changed
                    },
                    onCommit: {
                        print("\(self.gcTask.title)  => onCommit")
                        // GCCoreData.save()  // normally save here
                    }
                )
            }
        }
    }

}

Анимированный GIF - Что происходит, когда я нажимаю в TextField и набираю 1,2,3,4,5:

enter image description here

1 Ответ

1 голос
/ 17 апреля 2020

Следующий простой тест хорошо работает для меня на ios 13.4.1 и катализаторе. Это указывает на gcTask как источник проблемы.

import SwiftUI

struct ContentView: View {
@State var gcTask = "xxxx"
@State var beingEdited = false
var body: some View {
    List {
        TextField("Enter:", text: $gcTask,
            onEditingChanged: { changed in
                print("\(self.gcTask)  => onEditingChanged = \(changed)")
                self.beingEdited = changed
        },
            onCommit: {
                print("\(self.gcTask)  => onCommit")
                // where I'll put code to save/finalise update
        }
        )
    }
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...