单击Tab Bar上的选项卡时,获取回调/执行一些代码

时间:2010-09-08 12:43:18

标签: iphone uitabbar selecteditem notify

或者,我可以使用像viewWillAppear这样的东西,只有切换标签不会调用viewWillAppear - 如果我可以从那里可靠地访问selectedItem或selectedIndex。

目标是重复使用类似的表格视图,其中3个标签用不同的过滤数据填充表格。

我尝试覆盖didSelect并使用app delegate作为UITabBarDelegate,但得到错误'不允许更改由标签栏控制器管理的标签栏的委托。'

标签栏控制器rootCt位于app委托中并且可以正常工作。

这就是我正在寻找的技巧 - 当索引发生变化时从根(标签栏)控制器获取通知。想法?

4 个答案:

答案 0 :(得分:4)

尝试实施 UITabBarController委托。它有一个类似于UITabBar委托提供的didSelect:方法的方法:
tabBarController:didSelectViewController:。它将在用户选择另一个选项卡后调用。

请参阅:UITabBarControllerDelegate Protocol Reference

答案 1 :(得分:2)

tabBarController.tabBar.selectedItem.tag

它将为您提供当前所选标签栏索引的标记

如果您正在使用tabBar den

- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item

是选择tabbar时调用的委托方法。

快乐的iCoding ......

答案 2 :(得分:2)

您可以使用 UITabBarControllerDelegate

的委托方法
- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController 

并且您self.selectedIndex将为您提供所选索引。

答案 3 :(得分:0)

我通常不做这种事(回答我自己的问题)。但是这里有。

例如,如果我单击选项卡2,然后单击选项卡3,再选择选项卡2,则会调用该视图的viewWillAppear,但不会更改didSelectViewController方法 - 并且selectedIndex不会更改!

似乎selectedIndex仅在加载视图时更新,而不是在视图已加载并且仅显示时更新。

我做了一些测试,与selectedIndex不同,即使视图已经加载,标签栏的selectedItem也会正确更新(在viewWillAppear中,单击选项卡中的视图)。通过f.ex.数组中的标签标题,可以查找匹配的索引。

所以我将省略didSelectViewController并且不需要UITabBarController,我只需要将UITabBar连接到IBOutlet并使用[myTabBar selectedItem] .title在重用视图的viewWillAppear中正确初始化。

如果有人提供更通用/有用/简单的解决方案,我很乐意为此加以标记!如果没有,请在几天后再回来查看。很高兴我成功了:))