2010-04-07 79 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,而不是按预期工作。

相关问题