2011-10-29 154 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

相關問題