2012-02-26 19 views
28

Tweetbot y Clear muestran en el primer inicio de la aplicación una pequeña pantalla tutorial sobre cómo funciona la aplicación. La pantalla con el pequeño tutorial solo aparece en la primera puesta en marcha de la aplicación (1 vez)Mostrar pantalla en el primer lanzamiento solo en iOS

¿Cómo y con qué puedo hacer algo similar? ¿Alguien puede empujarme en la dirección correcta?

Ver que quiero decir:

enter image description here

Respuesta

33

En su viewDidLoad:

if (![@"1" isEqualToString:[[NSUserDefaults standardUserDefaults] 
           objectForKey:@"aValue"]]) { 
    [[NSUserDefaults standardUserDefaults] setValue:@"1" forKey:@"aValue"]; 
    [[NSUserDefaults standardUserDefaults] synchronize]; 

    //Action here 

} 
+8

No entiendo lo que quiere decir con: '1 'representa cuántas veces verías la acción. Solo estás configurando una cadena, si cambias esto a cualquier cadena, incluyendo 2, 3, etc., solo se disparará una vez. – thepaperboy

+0

Aún funciona perfectamente en iOS 9. En mi caso, lo usé para mi pantalla de inicio. Mis problemas fueron, estaba usando la misma vista para mi pantalla de inicio y mi navegador principal, al tocar mi vista del menú de la izquierda, presentaría mi splash de nuevo. Resuelto eso colocando [[NSUserDefaults standardUserDefaults] setValue: @ "" forKey: @ "aValue"]; en mi didFinishLaunchingWithOptions. Por lo tanto, restablecer en el lanzamiento de la aplicación. Gracias por esto. – ChrisOSX

53

Asumo por Xcode en realidad se refiere a iOS.

Lo que debe hacer es utilizar la clase NSUserDefaults para almacenar una marca que indique si el usuario ha visto la pantalla del tutorial anteriormente.

Cuando la aplicación carga por primera vez (o en el punto que desee para decidir si desea o no mostrar la pantalla de prácticas), hacer algo como esto:

if(![[NSUserDefaults standardUserDefaults] boolForKey:@"hasSeenTutorial"]) 
    [self displayTutorial]; 

Esto comprueba el NSUserDefaults guardados para el usuario actual para un valor llamado "hasSeenTutorial", que aún no existirá. Como no existe, llamará al displayTutorial. displayTutorial se refiere a su método para crear la vista tutorial. Puedes descubrir esa parte.

Entonces, una vez que el usuario cierra la pantalla de prácticas:

[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"hasSeenTutorial"]; 

Ese valor se guardará para su perfil de usuario, es decir, la próxima vez que se comprueba que, será verdad, por lo que no será displayTutorial llamado.

+12

Olvidó demasiado 'synchronize'. – Nathan

+6

Si marca el documento, "este método se invoca automáticamente a intervalos periódicos", por lo que es innecesario a menos que el programa esté por salir o tenga algún otro fenómeno que prohíba su llamada – Jeremy

3

Inicializar los valores predeterminados del usuario con un BOOL, algo que se llama instructionsSeen (o como se quiera) y configurarlo para que NO en el método initialize del delegado de la aplicación .. En su aplicación, probar este valor y, si es NO mostrar su pantalla de prácticas . Como parte de mostrar y mostrar esta pantalla, configure el instructionsSeen en YES y guárdelo en sus valores predeterminados.

De esta forma, la pantalla de demostración solo se mostrará en el primer lanzamiento, a menos que el usuario desinstale e instale la aplicación nuevamente.

También podría mostrar la demostración para un pequeño número de lanzamientos (digamos 3). En este caso, no use BOOL use un número e increméntelo en su lugar.

9

Ciertamente, si nos gustaría decir algo sobre el usuario características después de la actualización (no sólo de aplicación ejecutados por primera vez), a continuación la solución podría ser adecuado.

En su 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! 
} 

Una vez que el usuario cierra la intro:

NSString *currentBundleVersion = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"];  
NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults]; 

if (standardUserDefaults) { 
    [standardUserDefaults setObject:currentBundleVersion forKey:@"PreviousBundleVersion"]; 
    [standardUserDefaults synchronize]; 
} 

En esta versión caso de aplicación paquete almacenado en sus standardUserDefaults será diferir de la versión actual paquete sólo después de la actualización y se muestra solo una vez, así como en el primer lanzamiento.

0

versión Swift:

if !(NSUserDefaults.standardUserDefaults().boolForKey("seenTutorial")) { 
      //Tutorial part 
      NSUserDefaults.standardUserDefaults().setBool(true, forKey: "seenTutorial") 
     } 
1
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
if (![defaults objectForKey:@"firstRun"]) { 
    [defaults setObject:[NSDate date] forKey:@"firstRun"]; 
    [self displayTutorial]; 
} 
+1

@ChrisLoonam Modifiqué el código al que guarda el estado en NSUserDefaults. – Venkat

0

Todo el mundo está haciendo esto más complejo y vauge de lo que debe ser ... solución completa simple.

En el viewDidLoad:

if ([[NSUserDefaults standardUserDefaults] boolForKey:@"FirstLoadKey"]) { 
    self.imageView.hidden = YES; 
}else{ 
    self.imageView.hidden = NO; 
    [[NSUserDefaults standardUserDefaults]setBool:YES forKey:@"FirstLoadKey"]; 
    [[NSUserDefaults standardUserDefaults]synchronize]; 
} 
+0

No es una vista de imagen ... Vea que hay una ViewPager en la parte inferior de la pantalla ☻☻☻☻. –

1

Xamarin.iOS Versión dentro 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(); 

En mi StartPageViewController, que tienen un botón que establece NSUserDefaults de verdad, así que la próxima vez que se ejecuta, Comenzará con NonStartPageViewController:

partial void RegisterButton_TouchUpInside (UIButton sender) 
    { 
     NSUserDefaults.StandardUserDefaults.SetBool(true,"hasSeenTutorial"); 
     NSUserDefaults.StandardUserDefaults.Synchronize(); 
    } 
+0

Bien, pero, ¿dónde ubicaría el código que comprueba el "hasSeenTutorial" en AppDelegate? No instalo manualmente el guión gráfico, ya está hecho para mí en función de la configuración del proyecto. – Glaucus

+0

Ok, no importa. Lo puse en el método FinishedLaunching() y borré la "Interfaz principal" en la configuración del proyecto. – Glaucus

Cuestiones relacionadas