Tweetbot et Clear montrent au premier démarrage de l'application un petit écran de tutoriel sur le fonctionnement de l'application. L'écran avec le petit tutoriel ne s'affiche que lors du premier démarrage de l'application (1 fois)
Comment et avec quoi puis-je faire une chose semblable? Quelqu'un peut-il me pousser dans la bonne direction?
Voir je veux dire:
Dans votre viewDidLoad:
if (![@"1" isEqualToString:[[NSUserDefaults standardUserDefaults]
objectForKey:@"aValue"]]) {
[[NSUserDefaults standardUserDefaults] setValue:@"1" forKey:@"aValue"];
[[NSUserDefaults standardUserDefaults] synchronize];
//Action here
}
Je suppose que par Xcode, vous voulez dire iOS.
Ce que vous devez faire, c'est utiliser la classe NSUserDefaults
pour stocker un indicateur indiquant si l'utilisateur a déjà vu l'écran du didacticiel.
Lorsque votre application est chargée pour la première fois (ou au moment où vous souhaitez décider d'afficher ou non l'écran du didacticiel), procédez comme suit:
if(![[NSUserDefaults standardUserDefaults] boolForKey:@"hasSeenTutorial"])
[self displayTutorial];
Ceci vérifie les NSUserDefaults enregistrés pour l'utilisateur actuel pour une valeur nommée "hasSeenTutorial", qui n'existe pas encore. Comme il n'existe pas, il va appeler displayTutorial
. displayTutorial
fait référence à votre méthode de création de la vue de tutoriel. Vous pouvez comprendre cette partie.
Ensuite, une fois que l'utilisateur ferme l'écran du didacticiel:
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"hasSeenTutorial"];
Cette valeur sera sauvegardée pour votre profil utilisateur. Cela signifie que la prochaine fois qu'il le vérifiera, ce sera vrai, donc displayTutorial
ne sera pas appelé.
Bien entendu, si nous souhaitons informer l’utilisateur des fonctionnalités après la mise à jour (non seulement l’application lancée pour la première fois), la solution ci-dessous pourrait convenir.
Dans votre viewDidLoad:
NSString *currentBundleVersion = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"];
NSString *previousBundleVersion = [[NSUserDefaults standardUserDefaults] objectForKey:@"PreviousBundleVersion"];
if (![currentBundleVersion isEqualToString:previousBundleVersion] ) {
// Here you can initialize your introduction view and present it!
}
Une fois que l'utilisateur ferme l'intro:
NSString *currentBundleVersion = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"];
NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults];
if (standardUserDefaults) {
[standardUserDefaults setObject:currentBundleVersion forKey:@"PreviousBundleVersion"];
[standardUserDefaults synchronize];
}
Dans ce cas, la version de l'ensemble d'applications stockée dans votre standardUserDefaults diffère de la version actuelle de l'ensemble uniquement après la mise à jour et n'est affichée qu'une seule fois, ainsi qu'au premier lancement.
Initialisez vos valeurs utilisateur par défaut avec un BOOL, quelque chose appelé instructionsSeen
(ou ce que vous voulez) et réglez-le sur NO
dans la méthode d'initialisation de votre délégué d'Application. Dans votre application, testez cette valeur et affichez votre écran de tutoriel s'il s'agit de NO
. Pour afficher et afficher cet écran, définissez instructionsSeen
sur YES
et enregistrez-le dans vos paramètres par défaut.
De cette façon, l'écran de démonstration ne s'affichera qu'au premier lancement, à moins que l'utilisateur ne désinstalle et installe l'application à nouveau.
Vous pouvez également montrer la démo pour un petit nombre de lancements (disons 3). Dans ce cas, n'utilisez pas BOOL
, utilisez un nombre et augmentez-le à la place.
Version Xamarin.iOS dans AppDelegate:
UIStoryboard storyboard = UIStoryboard.FromName("Main", null);
if (NSUserDefaults.StandardUserDefaults.BoolForKey ("hasSeenTutorial") == false) {
UIViewController vc = storyboard.InstantiateViewController ("StartPageViewController");
this.Window.RootViewController = vc;
} else {
UIViewController vc = storyboard.InstantiateViewController ("NonStartPageViewController");
this.Window.RootViewController = vc;
}
this.Window.MakeKeyAndVisible ();
Dans mon StartPageViewController, j'ai un bouton qui définit NSUserDefaults sur true. Ainsi, lors de sa prochaine exécution, il démarrera avec NonStartPageViewController:
partial void RegisterButton_TouchUpInside (UIButton sender)
{
NSUserDefaults.StandardUserDefaults.SetBool(true,"hasSeenTutorial");
NSUserDefaults.StandardUserDefaults.Synchronize();
}
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if (![defaults objectForKey:@"firstRun"]) {
[defaults setObject:[NSDate date] forKey:@"firstRun"];
[self displayTutorial];
}
Version rapide:
if !(NSUserDefaults.standardUserDefaults().boolForKey("seenTutorial")) {
//Tutorial part
NSUserDefaults.standardUserDefaults().setBool(true, forKey: "seenTutorial")
}
Tout le monde fait cela plus complexe et vauge qu'il ne devrait être ... Solution complète simple.
Dans le ViewDidLoad:
if ([[NSUserDefaults standardUserDefaults] boolForKey:@"FirstLoadKey"]) {
self.imageView.hidden = YES;
}else{
self.imageView.hidden = NO;
[[NSUserDefaults standardUserDefaults]setBool:YES forKey:@"FirstLoadKey"];
[[NSUserDefaults standardUserDefaults]synchronize];
}