【问题标题】:UITabBarController Weirdness ?UITabBarController 怪异?
【发布时间】:2011-07-26 18:34:16
【问题描述】:

如果我通常加载UITabBarController 并在视图之间切换,它会调用每个视图控制器的viewWillAppear。 但事实并非如此。

我想在触摸另一个标签后立即切换到另一个标签。

如果我指定要加载的选项卡 - 例如其中一个选项卡(例如选项卡 4)的 viewWillAppear 中的 [self.tabBarController setSelectedIndex:0]... 它会立即返回到选项卡 0。

但在那之后......当我在它们之间切换时,它不会在任何选项卡上调用viewWillAppear。 例如,如果我再次转到选项卡 4,它不会返回到选项卡 0。我希望它通过一个永无止境的循环,因为我希望一旦触摸选项卡 4,选项卡 0 就会加载。

但它运行只运行一次!!

为什么??


注意:问题已被编辑。

【问题讨论】:

  • 这个问题不需要任何代码。我很乐意发布代码,但用代码解释会使问题太长。这个问题很直接。
  • 好的。那么你在哪里打电话给setSelectedItem?在某些静态方法(例如applicationDidFinichLaunching)或其他地方?
  • 其实你提出了一个很好的观点。让我根据我的确切情况编辑问题
  • 您是否检查了每个视图的viewDidDisappear: 方法?虽然我怀疑是这样,但视图可能不知道它们已经消失,因此无法再次出现。如果没有别的,它可能值得检查
  • 我只能复制一半。我已经设置了两个选项卡,如果我单击第二个选项卡,我会调用 setSelectedIndex:0,它会切换到 0,并在其中调用 viewWillAppear。但它只运行一次......你确定你的'0'标签上的viewWillAppear没有被调用吗?

标签: iphone objective-c cocoa-touch uitabbarcontroller selectedindex


【解决方案1】:

我想我找到了解决办法。 每次你点击你的标签,它都会在两个标签上调用 viewWillAppear

您可以在您的 AppDelegate(或 UITabBarController 的委托中的其他地方)中执行此操作:

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController

示例代码:

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {
    if([self.tabBarController.viewControllers indexOfObject:viewController] == 1) {
        [self.tabBarController setSelectedIndex:0];
    }
}

【讨论】:

  • 这种方法会导致 viewWillAppear 将被调用两次的情况(由用户交互原生,然后由此代码调用)。如果 viewWillAppear 里面没有关键代码那么没问题。
  • 您始终可以创建一个属性来指示是否应该执行关键代码
【解决方案2】:

设置 selectedIndex 不会改变 selectedViewController。您将不得不更改 selectedViewController 本身。查看the documentation了解更多详情。

【讨论】:

  • 我用setSelectedIndex 更改了我选择的标签,它可以工作,所以不是那样...
  • 设置 setSelectedIndex 只是更改选定的选项卡,但它不会像触摸指定项目那样处理它。您将需要设置 selectedViewController。
  • 不,他没有。 setSelectedIndex != setSelectedTab。它会自动设置selectedViewControler
  • @Legolas 我认为@yinkou 是对的。尝试做这样的事情:[[self tabBarController] setSelectedViewController:[[[self tabBarController] viewControllers] objectAtIndex:0]]
  • 如果更多导航控制器正在使用并且索引选项卡有效地存在于其中,则使用-selectedIndex: 将无效。在这些情况下,根据文档,-selectedViewController: 是这样做的方法。
猜你喜欢
  • 2016-03-02
  • 1970-01-01
  • 2010-11-11
  • 2011-09-10
  • 2012-10-28
  • 2014-09-17
  • 2010-10-12
  • 2012-11-15
  • 1970-01-01
相关资源
最近更新 更多