2010-04-07 82 views
2

這應該是這麼簡單......但有些棘手的事情正在發生。iPhone:selectedIndex值的選項卡應該是一致的,但不是

我的設置是這樣的:

MainViewController 
    Tab Bar Controller 
     4 tabs, each of which loads WebViewController 

我的AppDelegate包含實例變量,tabBarController,其被連接到標籤欄控制器(這是所有設置在界面生成器)。 IB中最左邊的選項卡標記爲「選中」。

在WebViewController的viewWillAppear方法中,我需要知道剛選擇了哪個選項卡,以便加載正確的URL。我通過切換appDelegate.tabBarController.selectedIndex來做到這一點。

當應用第一次運行並且最左邊的選項卡被選中時,selectedIndex是一個大的垃圾值。之後,我得到0到3的值,這是應該的,但它們是隨機的。不僅如此,每次觸摸的每個標籤都會報告不同的值。

這個應用程序是非常現在簡單,我無法想象我能做些什麼讓事情出錯。

有沒有人看到(並希望解決)這種行爲?

更新:我們有一個代碼請求。沒有什麼可看的。

標籤欄控制器被加載的applicationDidFinishLaunching:

[self.mainViewController view]; //force nib to load 
[self.window addSubview:self.mainViewController.tabBarController.view] 

目前還沒有在MainViewController.m比合成其他任何代碼和釋放tabBarController。

從WebVewController.m:

- (void)viewWillAppear:(BOOL)_animation { 
    [super viewWillAppear:_animation]; 

    NSURL *url; 
    switch([S_UIDelegate mainViewController].tabBarController.selectedIndex) { 
     case 0: url = [NSURL URLWithString:@"http://www.cnn.com"]; 
      break; 
     case 1: url = [NSURL URLWithString:@"http://www.facebook.com"]; 
      break; 
     case 2: url = [NSURL URLWithString:@"http://www.twitter.com"]; 
      break; 
     case 3: url = [NSURL URLWithString:@"http://www.google.com"]; 
      break; 
     default: url = [NSURL URLWithString:@"http://www.msnbc.com"]; 
    } 

    NSURLRequest *request = [NSURLRequest requestWithURL:url]; 
    [webView loadRequest:request]; 
} 

這是我看到的隨機值。 BTW,S_UIDelegate只是一個返回指向應用程序委託的指針的宏。我使用別人的應用程序模板,他是#define的粉絲,可以節省打字時間。

+0

某些代碼可能有所幫助... – 2010-04-07 17:10:16

+0

您是否嘗試將值指定給selectedIndex以查看發生了什麼。 – FKDev 2010-04-07 17:28:24

+0

您的tabController是否連接到appDelegate或mainViewcontroller? – FKDev 2010-04-07 17:32:05

回答

2

你應該嘗試交換機的情況下移動到tabBarController代表: - tabBarController:shouldSelectViewController: - tabBarController:didSelectViewController:

6

一位同事只是提供了答案。 selectedIndex尚未在viewWillAppear中設置;當我切換到使用viewDidAppear,而不是按預期工作。

相關問題