2012-02-16 72 views
0

好吧我有一個使用選項卡控制器的應用程序。然而,在我想要加載標籤控制器之前,我希望用戶輸入一個屏幕,允許他們首先輸入他們的電話號碼,因爲我需要保存用戶的電話號碼以供在應用程序中使用。我將這個號碼保存到應用程序中。iPhone刷新AppDelegate

[[NSUserDefaults standardUserDefaults] setInteger:1234 forKey:@"PhoneNumber"]; 

基本上,當他們第一次進入應用,將打開一個窗口,這將使他們能夠存儲在文本字段中輸入自己的號碼,它使用保存NSUserDefaults的。

在的appDelegate,我有一個if或檢查語句是否值存儲不喜歡這個

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
    NSInteger phoneNumber=[[NSUserDefaults standardUserDefaults] integerForKey:@"PhoneNumber"]; 

    if(phoneNumber == 0){ 
     //So this is the window which allow them to enter their phone number 
     UIViewController *phoneNumberVC = [[PhoneNumberVC alloc] initWithNibName:@"PhoneNumber" bundle:nil]; 
     UIViewController *phoneNumberRootVC = [[UINavigationController alloc] initWithRootViewController:phoneNumberVC]; 
     self.window.rootViewController = phoneNumberRootVC;  
     [self.window makeKeyAndVisible];  
    }else{ 
     //Code here sets up tab controller and all the tabs etc 
    } 
} 

現在的代碼工作正常,除了事實號碼保存後,我有退出模擬器並再次運行,然後出現選項卡屏幕。不過,我希望標籤控制器在用戶按下電話號碼屏幕中的按鈕後立即加載以保存號碼。電話號碼屏幕中的當前方法是:

-(IBAction)testing{ 
    NSString *st = [phoneTF text]; 
    NSInteger pn = [st intValue]; 
    NSString *display = [NSString stringWithFormat:@"%i", pn]; 
    [[NSUserDefaults standardUserDefaults] setInteger:pn forKey:@"PhoneNumber"]; 
    UIAlertView * alert = [[UIAlertView alloc] initWithTitle:@"Warning" 
                message:display 
                delegate:self 
              cancelButtonTitle:@"Okay" 
              otherButtonTitles:nil]; 
    [alert show]; 
} 

該警報僅用於測試目的。所以在按下按鈕之後,我想讓選項卡控制器加載到應用程序委託中。無論如何,我可以刷新應用程序或應用程序委託?

非常感謝,如果有人能指出我在正確的方向!

編輯

試圖

[self.navigationController pushViewController:app.tabBarController animated:YES]; 

但作爲tabBarController尚未初始化,它不會運行

控制檯錯誤

Application tried to push a nil view controller on target <UINavigationController: 0x8056d40>. 

所以我需要運行AppDelegate再次,所以標籤控制器及其所有視圖將被初始化爲

回答

1

更換

UIAlertView * alert = [[UIAlertView alloc] initWithTitle:@"Warning" message:display 
              delegate:self cancelButtonTitle:@"Okay" otherButtonTitles: nil]; 
[alert show]; 

的代碼,要求導航控制器切換到您需要的另一種觀點:

YourOtherViewController *yourOtherViewController = [[YourOtherViewController alloc] init]; 
[self.navigationController pushViewController:yourOtherViewController animated:YES]; 

編輯

如果你想從訪問的AppDelegate phoneNumberVC,您可以執行以下操作:

if(phoneNumber == 0){ 
    UIViewController *phoneNumberVC = [[PhoneNumberVC alloc] initWithNibName:@"PhoneNumber" bundle:nil]; 
    phoneNumberVC.appDelegate = self; // add this property to PhoneNumberVC 
    UIViewController *phoneNumberRootVC = [[UINavigationController alloc] initWithRootViewController:phoneNumberVC]; 
    self.window.rootViewController = phoneNumberRootVC; 
} else { 
    [self setUpTabViewController]; // add this function 
} 
[self.window makeKeyAndVisible]; 

而且在PhoneNumberVC類似:

[self.appDelegate setUpTabViewController]; 
+0

該代碼是好的,如果你只是想開闢一個新的廈門國際銀行,但我需要打開一個選項卡控制器。選項卡控制器和所有選項卡屏幕都在AppDelegate中設置,而不是在PhoneNumberVC中設置。所以我的問題是,我如何再次訪問AppDelegate並從那裏運行代碼。電話號碼屏幕不是選項卡控制器的一部分,只是普通視圖 – AdamM 2012-02-16 13:38:16

+0

請參閱我的更新答案。對你起作用嗎? – sch 2012-02-16 13:44:15

+0

不幸的不是。您在應用程序委託中的if語句意味着在用戶在電話號碼屏幕中保存其號碼之前,製表符控制器從不初始化。完成之後,我需要再次運行應用程序委託代碼,以便設置選項卡導航控制器。看看我的編輯,看看我試過的是什麼 – AdamM 2012-02-16 13:50:45