我有这个代码 - (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item
我正在寻找的是一个代码片段,说明如何使用项目检测代理中按下的按钮。
所以也许我在标签栏上排列了1到4个按钮。我的用户按下按钮位置2.我需要知道,所以我可以调出适合该按钮的视图。
我试过这样的事情,但是没有用。
NSInteger *barIndex = [[barTab items] IndexofObject:item];
如果有人可以提供一些很棒的工作示例代码。
提前致谢。
答案 0 :(得分:5)
当您创建UITabBarItem
时,您需要为每个人提供特定标记。调用- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item
方法时,请读取标记号。
NSInteger tag = item.tag;
使用项目的索引不适用于标签栏,因为用户可以更改标签的顺序。
好的做法是为每个标记使用枚举,这样就不会在代码中散布一堆“随机”数字。
typdef enum {
JPButton1,
JPButton2,
JPButton3
} JPButtonType
然后在tabBar:didSelectItem:
方法中,您可以像这样测试标记:
if (item.tag == JPButton1) {
// do some stuff with button one here
}
答案 1 :(得分:3)
我意识到这个问题很老了,但也许这将有助于未来的人:
UITabBarController 有一个名为 selectedIndex 的属性。 例如,如果 UITabBarController 被声明为 myTabBar , 您始终可以通过调用
获取当前选定的选项卡索引[myTabBar selectedIndex]
对于第一个选项卡,它将等于0,对于第二个选项卡,它将等于1,依此类推......
答案 2 :(得分:1)
我知道这篇文章现在已经有好几年了,但你是在右边而不是使用
NSInteger *barItem = [[tabBar items] indexOfObject:item];
你需要使用
int barItem = [[tabBar items] indexOfObject:item];
这是因为
indexOfObject:item
将返回一个int而不是NSInteger。