或者,我可以使用像viewWillAppear这样的东西,只有切换标签不会调用viewWillAppear - 如果我可以从那里可靠地访问selectedItem或selectedIndex。
目标是重复使用类似的表格视图,其中3个标签用不同的过滤数据填充表格。
我尝试覆盖didSelect并使用app delegate作为UITabBarDelegate,但得到错误'不允许更改由标签栏控制器管理的标签栏的委托。'
标签栏控制器rootCt位于app委托中并且可以正常工作。
这就是我正在寻找的技巧 - 当索引发生变化时从根(标签栏)控制器获取通知。想法?
答案 0 :(得分:4)
尝试实施 UITabBarController委托。它有一个类似于UITabBar委托提供的didSelect:方法的方法:
tabBarController:didSelectViewController:
。它将在用户选择另一个选项卡后调用。
答案 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中正确初始化。
如果有人提供更通用/有用/简单的解决方案,我很乐意为此加以标记!如果没有,请在几天后再回来查看。很高兴我成功了:))