如何解除ORKTaskViewController并呈现我选择的视图控制器?

时间:2017-08-22 21:19:24

标签: ios swift xcode uiviewcontroller researchkit

我花了24小时试图找到解决此问题的方法。当用户在我的应用程序上注册时,他们将不得不回答一系列调查问题(我使用ORKorderedtask(研究工具包)创建)。一旦调查完成,我想要显示主页,但是当我测试应用程序并完成调查时,它会直接返回到注册页面。这是我的代码:

1.显示已订购的任务视图控制器;

let registrationTaskViewController = ORKTaskViewController(task:  registrationSurvey, taskRun: nil)
registrationTaskViewController.delegate = self
self.present(registrationTaskViewController, animated: true, completion: nil)

2。关闭任务视图控制器(这不起作用);

func taskViewController(_ taskViewController: ORKTaskViewController, didFinishWith reason: ORKTaskViewControllerFinishReason, error: Error?) {
    self.dismiss(animated: false) {
    let home = homePageViewController()
    self.present(home, animated: true, completion: nil)
}

提前感谢。

1 个答案:

答案 0 :(得分:0)

如果不知道堆栈中的所有ViewControllers,我建议不要忽略您的注册页面视图控制器。而是将您的HomePageViewController置于“注册”屏幕的顶部。只需将您的委托方法更改为:

func taskViewController(_ taskViewController: ORKTaskViewController, didFinishWith reason: ORKTaskViewControllerFinishReason, error: Error?) {
    let home = homePageViewController()
    self.present(home, animated: true, completion: nil)
}

或者你甚至可以在解析你的ORKTaskViewController之后在完成块中显示你的HomePageViewController。这种方法的好处是,当用户驳回调查时,他们会立即看到HomePageViewController

let registrationTaskViewController = ORKTaskViewController(task:  registrationSurvey, taskRun: nil)
registrationTaskViewController.delegate = self
self.present(registrationTaskViewController, animated: true, completion: {
    let home = homePageViewController()
    self.present(home, animated: true, completion: nil)
})

还有几点:

•类应以大写字母开头(即HomePageViewController)。这是每个经验丰富的开发人员都使用的惯例,Apple甚至建议使用。

•最终,我建议使用导航控制器来处理这些过渡。使用导航控制器,您可以使用推送段来实现更好的“流量”。它感觉更好。