0

我正在尝试以编程方式切换标签栏项目。以下代码工作正常,但在某些情况下我无法让它工作:

self.tabBarController.selectedIndex = 0;

这是问题所在:

我有一个带有两个 UIViewController 类的标签栏控制器。在第二个选项卡中,我将上面的代码放在 viewWillAppear 方法的 if 语句中。上面的代码本身可以工作,但它只有在视图从未加载过的情况下才有效。所以,在第一个选项卡上我有一个按钮。当按下该按钮时,我以编程方式切换到第二个选项卡。那时我的代码有效,我基本上停留在第一个选项卡上。但是在第一次之后切换不起作用。如果我在按下该按钮之前选择了第二个选项卡,它也不起作用。我的代码在里面的 IF 语句会触发,但选定的选项卡不会改变。

任何帮助,将不胜感激。如果您需要,请随时要求澄清。

谢谢!


让我添加更多信息:

(1) 这仅在极少数情况下使用。第一个屏幕是搜索屏幕。按搜索后,您将自动转到第二个选项卡,除非没有结果,否则您会收到警报并留在那里。

(2) 如果没有执行缩小搜索,则第二个选项卡维护所有项目的列表,或者维护缩小项目的列表。无论哪种方式,该列表始终可用。因此,即使我在搜索页面上阻止他们,如果他们忘记并单击另一个选项卡,他们也会被告知没有项目。在这一点上,我想把它们带回标签一,只是为了方便。

这没什么大不了的,没有它我也能活下去,而且这并不是某些人所认为的可怕的编程方案。我只是想添加一个用户便利项...


感谢tc!我在我的 UITabBarControllerDelegate 中使用了以下方法:

- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController{

if(self.tabBarController.selectedIndex == 0){
    if([books count] == 0){

        [self alertNoResults];

        return(FALSE);
    }
}
return(TRUE);
}

像魅力一样工作!

4

1 回答 1

1

您在选项卡切换期间切换选项卡。火腿医生。

尝试实现 UITabBarDelegate 的- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController;如果没有结果则返回 NO。

或者,进行签入-viewDidAppear:(它更有可能工作)。如果这不起作用,您甚至可以使用 performSelectorInBackground(但请注意——用户可能仍会点击其他选项卡!)

于 2010-08-06T18:59:14.900 回答