2

我花了 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)
}

提前致谢。

4

1 回答 1

0

在不知道堆栈中的所有 ViewController 的情况下,我建议不要关闭您的注册页面视图控制器。而是在HomePageViewController您的注册屏幕顶部显示您的。只需将您的委托方法更改为:

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

或者你甚至可以HomePageViewController在你提交你的 ORKTaskViewController 之后在完成块中显示你的。这种方法的好处是,当用户关闭调查时,他们将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 甚至推荐。

• 最后,我建议使用导航控制器来处理这些转换。使用导航控制器,您可以使用推送 segues 实现更好的“流程”。只是感觉好多了。

于 2017-08-22T21:43:18.347 回答