背景:
我有一个带有5个标签的应用。用户第一次导航到每个选项卡时,我想显示一个一次性的“教程”。我打算通过创建一个“TutorialViewController”来做到这一点,该“TutorialViewController”将处理显示这些“tutorial”视图,并具有用于下一个/ back等的按钮。
问题:
我不确定用于实现是否显示这些屏幕并实例化“TutorialViewController”以显示它们的逻辑的最佳模式。目标是只有一行代码(一个方法调用)在必要时显示本教程。我试图避免在5个视图控制器之间重复代码。问题是在哪里/如何实现此单一方法。作为TutorialViewController上的类方法?作为全局C函数?
我考虑过的事情:
1)在TutorialViewController上实现一个名为“displayTutorialIfNecessary”的类方法。在这种情况下,具有教程的每个视图控制器都将从其“viewDidAppear”方法中调用此类方法。此类方法将检查是否已经显示了该教程,如果没有显示,它将实例化TutorialViewController对象以处理该对象以显示它。在这个选项中,我想我将不得不从每个调用视图控制器中传递“自我”,而类方法将使用它来显示TutorialViewController。
2)在TutorialViewController上实现一个名为“tutorialShouldBeDisplayedForScreen:”的类方法。在此选项中,每个调用视图的控制器都将调用此方法,并且如果返回true,则每个vc都将实例化并显示“TutorialViewController”,该“TutorialViewController”将用于显示教程。
我确定有一种“最佳实践”或一种适合这种情况的模式,但是我不确定最佳实现是什么。预先感谢您的建议。
总结一下:在每个视图控制器中不要像这样:
if ([TutorialViewController shouldDisplayTutorialForScreen:<someEnum>])
{
TutorialViewController *myTutorialVC = [[TutorialViewController alloc] init];
[self displayModalViewController: myTutorialVC];
}
我想要更多这样的东西:
[FirstUseViewController displayTutorialIfNecessaryForScreen: <someEnum> forParentViewController: self];
最佳答案
将已显示状态的教程存储到NSUserDefaults
中,并使用工厂方法设计模式来让您需要的每个UIViewController创建并返回教程UIViewController
,例如:
- (UIViewController *)tutorialVC {
return [[MYHomeScreenTutorialVC alloc] init];
}
关于ios - 应用中最适合初次使用教程的最佳设计/模式?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19006910/