2011-10-29 117 views
3

我想要显示仅在首次启动应用程序时制作的“简介”笔尖。在第一次应用程序启动时加载.nib

我在我的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,它的工作原理!我没有加载笔尖吗?

编辑

我忘了说这是一个标签栏基于应用和我的一些代码在我的应用程序代理在该应用程序的前三届会议突出行。 任何帮助表示赞赏!

+0

的可能的复制http://stackoverflow.com/questions/2487541/presentmodalviewcontroller-not-working – djromero

+1

不要这样想。 – Phillip

回答

3

好,添加以下代码,它应该工作:

- (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中) 为此刚才设置加载第二个视图之前的一小段延迟。

+0

谢谢!工作正常! – Phillip

0

你有没有试过把它移动到viewDidAppear?

+0

是的,但没有发生任何事! – Phillip

+0

我想说的是,将你的代码添加到 - (void)viewDidAppear:(BOOL)animated(检查拼写并记住重置应用程序的默认值或“if”不起作用,甚至更好,删除“if “在你的测试中) – djromero

+0

试过了,但是也发生了什么 – Phillip

1

尝试以下操作:

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

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

    [intro release]; 

我已经加入你的笔尖名initWithNibName

另外,如果你使用的是iOS 5(和ARC),你应该使用这样的:

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

    intro.modalTransitionStyle = UIModalTransitionStyleCoverVertical ; 
    [self presentModalViewController:intro animated:YES completion:nil]; 
+0

谢谢,我试过第二种方法,因为我使用的是iOS 5,但仍然没有任何内容。阅读”可能的重复“问题,我应该创建一个UINavigationController来推动视图首次发布? – Phillip

+0

你可能会检查你正在尝试加载的笔尖是否有其类集?你可以通过进入“Interface builder”(nib编辑器),选择'File's Owner'并转到'右侧视图'(又名:utilities)的第三个选项卡来检查。在你的案例中,文本字段'Class'应该是IntroViewController。 – Louis

+0

是的,因为当我将它从我创建的按钮上按下时,它会很好。但是,当我尝试在第一次应用程序启动时显示它时,它不会推送任何东西 – Phillip

0

在我看来,你应该把该代码放在你的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方法,如果是的话,检查你的测试是否合适。
我建议可能在NSNumber中使用BOOL来检查再次。

最重要的是,你可以考虑把它放在viewDidAppear中的选项。

+0

因为它是基于TabBar的应用程序,所以Uhm似乎不工作。我已经有了一些NSUserDefaults代码来为应用程序的前三个会话做一件事情。 – Phillip

+0

你能更好地定义你的应用程序的工作流程,例如你想要什么时候出现,你希望通过你的标签控制器在一个选项卡上等 –

+0

因此,我的应用程序是由一个标签栏与4标签。第一个是受欢迎的,在那里,我制作了一个按钮,推动了“介绍”视图(所有说明)。我想在用户第一次启动应用时立即显示介绍视图! – Phillip

0

由于@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

你不应该忘记,** TourGuideViewController **位于Storyboard中有** TourGuideViewController的** StoryBorad ID **,我正在从** RootViewController:UITabBarController ** – Ashoor

相关问题