2012-02-26 14 views
28

Tweetbot i Clear pokazują na pierwszym uruchomieniu aplikacji mały ekran samouczka, jak działa aplikacja. Ekran z małym samouczkiem pojawia się tylko przy pierwszym uruchomieniu aplikacji (1 raz)Pokaż ekran przy pierwszym uruchomieniu tylko w iOS

Jak iz czym mogę zrobić coś podobnego? Czy ktoś może mnie popchnąć we właściwym kierunku?

Zobacz to znaczy:

enter image description here

Odpowiedz

33

W swojej viewDidLoad:

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

    //Action here 

} 
+8

Nie rozumiem, co masz na myśli przez: "1 "oznacza, ile razy chcesz zobaczyć akcję. Po prostu ustawiasz ciąg znaków, jeśli zmienisz go na dowolny ciąg znaków, w tym 2, 3 itd., Nadal będzie uruchamiany tylko raz. – thepaperboy

+0

Nadal działa idealnie na iOS 9. W moim przypadku użyłem tego do mojego ekranu powitalnego. Moje kłopoty polegały na tym, że korzystałem z tego samego widoku dla mojego ekranu powitalnego i mojej głównej nawigacji po dotknięciu lewego widoku menu, ponownie przedstawiał mój splash. Rozwiązano to przez umieszczenie [[NSUserDefaults standardUserDefaults] setValue: @ "" forKey: @ "aValue"]; w moim didFinishLaunchingWithOptions. Dlatego resetuje się po uruchomieniu aplikacji. Dzięki za to. – ChrisOSX

53

Jestem zakładając, przez Xcode rzeczywiście myśli iOS.

Co należy zrobić, należy użyć klasy NSUserDefaults, aby zapisać flagę wskazującą, czy użytkownik widział już ekran samouczka.

Kiedy aplikacja pierwsze ładunki (lub w miejscu, które ma zdecydować, czy nie pokazać ekran samouczek), zrób coś takiego:

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

ten sprawdza zapisane NSUserDefaults dla bieżącego użytkownika dla wartość o nazwie "hasSeenTutorial", która jeszcze nie istnieje. Ponieważ nie istnieje, zadzwoni pod numer displayTutorial. displayTutorial odnosi się do metody tworzenia widoku samouczka. Możesz wymyślić tę część.

Następnie, gdy użytkownik zamyka ekran Samouczek:

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

Wartość ta zostanie zapisana na profilu użytkownika, co oznacza, że ​​następnym razem to sprawdza go, to będzie prawdziwe, więc nie będzie displayTutorial nazywa.

+12

Zapomniałeś też "synchronizacji". – Nathan

+6

Jeśli zaznaczysz dokument, "ta metoda jest automatycznie wywoływana w okresowych odstępach czasu", więc nie jest to konieczne, chyba że program wkrótce się zakończy lub ma inne zjawiska, które uniemożliwiają jego wywołanie. – Jeremy

3

Initialise domyślnych ustawień użytkownika z BOOL, coś, co nazywa instructionsSeen (lub cokolwiek chcesz) i ustawić ją na NO w sposób zainicjować delegata aplikacji .. W swojej aplikacji, przetestować tę wartość, a jeśli jest to NO wyświetlić ekran samouczka . W ramach wyświetlania i wyświetlania tego ekranu ustaw instructionsSeen na YES i zapisz w swoich ustawieniach domyślnych.

W ten sposób ekran demonstracyjny pojawi się tylko przy pierwszym uruchomieniu, chyba że użytkownik odinstaluje i zainstaluje aplikację ponownie.

Możesz także pokazać demo z niewielkiej liczby uruchomień (powiedzmy 3). W takim przypadku nie używaj numeru BOOL i zamiast tego zwiększ go.

9

Oczywiście, jeśli chcemy powiedzieć coś na temat obsługi funkcji po aktualizacji (nie tylko aplikacja uruchomiona po raz pierwszy), poniżej rozwiązaniem mogłoby być odpowiednie.

W swojej 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! 
} 

Gdy użytkownik zamyka Intro:

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

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

w tej wersji przypadek aplikacja wiązki przechowywanych w swoim standardUserDefaults będą się różnić od aktualnej wersji wiązki tylko po aktualizacji i wyświetlane tylko raz, jak również przy pierwszym uruchomieniu.

0

wersja 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 Zmodyfikowałem kod, który zapisuje status w NSUserDefaults. – Venkat

0

Każdy robi to bardziej skomplikowane i vauge niż to musi być ... Proste kompletne rozwiązanie.

W 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

To nie jest widok obrazu ... Zobacz, czy na dole ekranu znajduje się ViewPager: ☻☻☻☻. –

1

Xamarin.iOS Wersja ciągu 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(); 

W moim StartPageViewController, mam przycisk, który ustawia NSUserDefaults true, więc następnym razem to działa, rozpocznie się od NonStartPageViewController:

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

Dobrze, ale gdzie by umieścić kod, sprawdza "hasSeenTutorial" w AppDelegate? Nie robię ręcznie instancji scenorysu, jest to zrobione dla mnie na podstawie ustawień projektu. – Glaucus

+0

Ok, nieważne. Wprowadziłem go do metody FinishedLaunching() i wygasiłem "Główny interfejs" w ustawieniach projektu. – Glaucus

Powiązane problemy