Показывать экран при первом запуске только в iOS - PullRequest
29 голосов
/ 26 февраля 2012

Tweetbot и Clear показывают при первом запуске приложения небольшой учебный экран о том, как работает приложение.Экран с небольшим учебником всплывает только при первом запуске приложения (1 раз)

Как и с чем я могу сделать подобное?Кто-нибудь может подтолкнуть меня в правильном направлении?

Вид, я имею в виду:

enter image description here

Ответы [ 8 ]

53 голосов
/ 26 февраля 2012

Я предполагаю, что под Xcode вы на самом деле имеете в виду iOS.

Что вам нужно сделать, это использовать класс NSUserDefaults, чтобы сохранить флаг, указывающий, видел ли пользователь экран учебника раньше.

Когда ваше приложение загружается впервые (или в тот момент, когда вы хотите решить, показывать ли экран учебника), сделайте что-то вроде этого:

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

Это проверяет сохраненные NSUserDefaults для текущего пользователя на значение с именем "hasSeenTutorial", которое еще не существует. Так как он не существует, он позвонит displayTutorial. displayTutorial относится к вашему методу создания учебного представления. Вы можете понять эту часть.

Затем, когда пользователь закрывает экран учебника:

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

Это значение будет сохранено для вашего профиля пользователя, то есть при следующей проверке оно будет иметь значение true, поэтому displayTutorial вызываться не будет.

33 голосов
/ 27 февраля 2012

По вашему мнениюDidLoad:

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

    //Action here

}
9 голосов
/ 24 января 2014

Конечно, если мы хотим сообщить пользователю что-то о функциях после обновления (не только приложение запускается впервые), может подойти приведенное ниже решение.

В вашем 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!
}

Как только пользователь закрывает вступление:

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

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

В этом случае версия пакета приложения, сохраненная в ваших StandardUserDefaults, будет отличаться от текущей версии пакета только после обновления и показываться только один раз, а также при первом запуске.

3 голосов
/ 26 февраля 2012

Инициализируйте свои пользовательские значения по умолчанию с помощью BOOL, который называется instructionsSeen (или как вам угодно), и установите его на NO в методе инициализации вашего делегата приложения. В вашем приложении проверьте это значение, и если оно равно NO отобразить экран учебника. Как часть показа и отображения этого экрана, установите instructionsSeen на YES и сохраните его по умолчанию.

Таким образом, демонстрационный экран будет отображаться только при первом запуске, если только пользователь не удалит и не установит приложение снова.

Вы также можете показать демонстрацию для небольшого количества запусков (скажем, 3). В этом случае не используйте BOOL, используйте число и увеличивайте его.

2 голосов
/ 21 мая 2016

Версия Xamarin.iOS в 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 ();

В моем StartPageViewController у меня есть кнопка, которая устанавливает NSUserDefaults в true, поэтому при следующем запуске она будет запускаться с NonStartPageViewController:

partial void RegisterButton_TouchUpInside (UIButton sender)
    {
        NSUserDefaults.StandardUserDefaults.SetBool(true,"hasSeenTutorial");
        NSUserDefaults.StandardUserDefaults.Synchronize();
    }
1 голос
/ 12 декабря 2015
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if (![defaults objectForKey:@"firstRun"]) {
    [defaults setObject:[NSDate date] forKey:@"firstRun"];
    [self displayTutorial];
}
0 голосов
/ 08 марта 2016

Каждый делает это более сложным и смелым, чем нужно ... Простое полное решение.

В 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 голосов
/ 27 ноября 2015

Swift версия:

if !(NSUserDefaults.standardUserDefaults().boolForKey("seenTutorial")) {
            //Tutorial part
            NSUserDefaults.standardUserDefaults().setBool(true, forKey: "seenTutorial")
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...