Загрузите .nib при первом запуске приложения - PullRequest
3 голосов
/ 29 октября 2011

Я хочу показать «вводное» перо, которое я сделал только при первом запуске приложения.

Я использовал следующий код в viewDidLoad, но он, похоже, ничего не делает (даже в ViewWillAppear).Я пытался очистить, удалить приложение из симулятора и устройства и собрать заново, но ничего не произошло.

 NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];  
    if (![defaults objectForKey:@"firstRun"]){
        IntroViewController *intro = [[IntroViewController alloc] initWithNibName:nil bundle:nil];

        intro.modalTransitionStyle = UIModalTransitionStyleCoverVertical ;
        [self presentModalViewController:intro animated:YES];

        [intro release];

        [defaults setObject:[NSDate date] forKey:@"firstRun"];

    }
    [[NSUserDefaults standardUserDefaults] synchronize];

Я также попытался показать небольшой UIAlertView при первом запуске, и это работает!Не удается загрузить перо?

РЕДАКТИРОВАТЬ

Я забыл сказать, что это приложение на основе панели вкладок, и в моем делегате приложения есть некоторый код для выделения строкна первых трех сессиях приложения.Любая помощь приветствуется!

Ответы [ 5 ]

3 голосов
/ 04 ноября 2011

Хорошо, добавьте следующий код, и он должен работать:

- (void)Loadview_afterdelay{

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];  
    if (![defaults objectForKey:@"firstRun"]){
    IntroViewController *intro = [[IntroViewController alloc] initWithNibName:nil bundle:nil];

    intro.modalTransitionStyle = UIModalTransitionStyleCoverVertical ;
    [self presentModalViewController:intro animated:YES];

    [intro release];

    [defaults setObject:[NSDate date] forKey:@"firstRun"];

      }

   [[NSUserDefaults standardUserDefaults] synchronize];

}


- (void)viewDidLoad {

[self performSelector:@selector(Loadview_afterdelay) withObject:nil afterDelay:0.5];

 }

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

1 голос
/ 30 октября 2011

Попробуйте следующее:

    IntroViewController *intro = [[IntroViewController alloc] initWithNibName:@"IntroViewController" bundle:nil];

    intro.modalTransitionStyle = UIModalTransitionStyleCoverVertical ;
    [self presentModalViewController:intro animated:YES];

    [intro release];

Я добавил ваше имя .nib в initWithNibName

Кроме того, если вы используете iOS 5 (и ARC), вы должны использовать это:

    IntroViewController *intro = [[IntroViewController alloc] initWithNibName:@"IntroViewController" bundle:nil];

    intro.modalTransitionStyle = UIModalTransitionStyleCoverVertical ;
    [self presentModalViewController:intro animated:YES completion:nil];
0 голосов
/ 03 декабря 2012

Поскольку @Louis уже очень хорошо ответил на вопрос, уже единственное, что он просто не совместим с ARC, поскольку есть [релиз]. То, что я сейчас напишу, не ново, но я объявлю это больше для начинающие.

Сначала вы должны импортировать TourGuideViewController.h в ваш RootViewController.h, который будет выглядеть примерно так:

#import <UIKit/UIKit.h>
#import "TourGuideViewController.h"

@interface RootViewController : UITabBarController
{
    TourGuideViewController *TourGuideViewController;
}

@property (nonatomic, strong) TourGuideViewController *TourGuideViewController;

@end

Тогда Вам нужно синтезировать и реализовать свою функцию в файле RootViewController.m:

#import "RootViewController.h"

@interface RootViewController ()

@end

@implementation RootViewController

@synthesize TourGuideViewController = _TourGuideViewController;

- (void)viewDidLoad
{
    [self performSelector:@selector(LoadTourGuide) withObject:nil afterDelay:0.5];
}

- (void)LoadTourGuide{
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

    if (![defaults objectForKey:@"FirstRun"]){
        TourGuideViewController *TourGuideVC = [self.storyboard instantiateViewControllerWithIdentifier:@"TourGuideViewController"];
        TourGuideVC.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
        [self presentViewController:TourGuideVC animated:YES completion:NULL];

        [defaults setObject:[NSDate date] forKey:@"FirstRun"];
    }

    [[NSUserDefaults standardUserDefaults] synchronize];
}

@end
0 голосов
/ 04 ноября 2011

Мне кажется, что вы должны поместить этот код в ваш AppDelegate

- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Override point for customization after application launch.
// Modify the code above to what you need.
self.window.rootViewController = self.viewController;
[self.window makeKeyAndVisible];
[application setStatusBarHidden:YES withAnimation:NO];
return YES;
}

Именно там вы указываете своему приложению, с какого вида начать. Так что впервые есть firstTimeViewController. Если вы делаете это здесь, не анимируйте переход в. Просто оживите переход.


Поставьте точку останова и проверьте, входите ли вы в метод viewDidLoad и, если да, проверьте, подходит ли ваш тест.
Я предлагаю использовать BOOL в NSNumber для проверки повторов.

Кроме того, вы можете рассмотреть возможность поместить это в viewDidAppear.

0 голосов
/ 29 октября 2011

Вы пытались переместить его в viewDidAppear?

...