我花了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)
}
提前感谢。
答案 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甚至建议使用。
•最终,我建议使用导航控制器来处理这些过渡。使用导航控制器,您可以使用推送段来实现更好的“流量”。它感觉更好。