1

或者,我可以使用 viewWillAppear 之类的东西,只有切换选项卡不会调用 viewWillAppear - 如果我可以从那里可靠地访问 selectedItem 或 selectedIndex。

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

我尝试覆盖 didSelect 并将应用程序委托用作 UITabBarDelegate,但收到错误“不允许更改由标签栏控制器管理的标签栏的委托。”

选项卡栏控制器 rootCt 位于应用程序委托中并且可以正常工作。

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

4

4 回答 4

5

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

请参阅:UITabBarControllerDelegate 协议参考

于 2010-09-08T13:17:59.780 回答
2
tabBarController.tabBar.selectedItem.tag

它会给你当前选择的标签栏索引的标签

如果您使用的是 tabBar den

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

是选择选项卡栏时调用的委托方法。

快乐的编码...

于 2010-09-08T12:52:16.080 回答
2

您可以使用委托方法 UITabBarControllerDelegate

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

并且你self.selectedIndex将给你选择的索引。

于 2012-10-11T12:56:45.650 回答
0

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

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

似乎 selectedIndex 仅在加载视图时才更新,而不是在视图已加载并仅出现时才更新。

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

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

如果有人提供更通用/有用/简单的解决方案,我会很乐意标记!几天后会检查,如果没有,请标记。很高兴我让它工作了:)

于 2010-09-09T07:32:26.140 回答