TutorialViewController

TutorialViewController

背景:

我有一个带有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/

10-08 20:39