我花了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)
}
提前谢谢。
在不知道堆栈中的所有视图控制器的情况下,我建议不要关闭您的注册页面视图控制器。而是在注册屏幕顶部显示您的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(。这是每个有经验的开发人员都使用的惯例,苹果甚至推荐。
• 最终,我建议使用导航控制器来处理这些转换。使用导航控制器,您可以使用推送 segue 实现更好的"流程"。只是感觉好多了。