Как закрыть модальный вид ResearchKit в SwiftUI? - PullRequest
0 голосов
/ 26 марта 2020

Я использую SwiftUI, чтобы запрограммировать приложение исследовательского набора для личного использования, и мне было интересно, как взаимодействовать с открытым заданием исследования Kit Kit с помощью Modal View.

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

struct SurveyView: UIViewControllerRepresentable {

typealias UIViewControllerType = ORKTaskViewController

func makeUIViewController(context: Context) -> ORKTaskViewController {

    let taskViewController = ORKTaskViewController(task: SurveyTask, taskRun: nil)
    taskViewController.view.tintColor = UIColor(red:0.64, green:0.15, blue:0.11, alpha:1.00)
    return taskViewController

}

func updateUIViewController(_ taskViewController: ORKTaskViewController, context: Context) {
    }

}

Я использую кнопку для вызова, но я не могу закрыть ее с помощью кнопки «Отмена» или «Готово» в исследовательском наборе, так как я нахожусь в неведении относительно того, где я должен реализовать didFinishWithReason reason: ORKTaskViewControllerFinishReason.

Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 27 марта 2020

Мне удалось сделать это с помощью координаторов. Если кому-то интересно, вот код:

struct SurveyView: UIViewControllerRepresentable {
func makeCoordinator() -> Coordinator {
    Coordinator()
}


typealias UIViewControllerType = ORKTaskViewController

func makeUIViewController(context: Context) -> ORKTaskViewController {

    let taskViewController = ORKTaskViewController(task: SurveyTask, taskRun: nil)
    taskViewController.view.tintColor = UIColor(red:0.64, green:0.15, blue:0.11, alpha:1.00)
    taskViewController.delegate = context.coordinator
    return taskViewController

}

func updateUIViewController(_ taskViewController: ORKTaskViewController, context: Context) {

    }

class Coordinator: NSObject, ORKTaskViewControllerDelegate {
    func taskViewController(_ taskViewController: ORKTaskViewController, didFinishWith reason: ORKTaskViewControllerFinishReason, error: Error?) {
        taskViewController.dismiss(animated: true, completion: nil)
    }
}

}

...