我想展示我在首次推出应用时制作的“简介”笔尖。
我在我的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 :(得分: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) 因此,您只需在加载第二个视图之前设置一个小延迟。
答案 1 :(得分:1)
尝试以下方法:
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];
答案 2 :(得分:0)
您是否尝试将其移至viewDidAppear?
答案 3 :(得分: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中。
答案 4 :(得分:0)
由于@Louis已经很好地回答了这个问题,唯一的问题就是它只是与ARC不兼容,因为有一个[发布]我现在写的内容并不新,但我会更多地宣布它初学者。
首先,您必须在RootViewController.h中导入TourGuideViewController.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