iPhone SDK:如何在标签栏上获取所选的tabitem?

时间:2010-02-02 19:47:32

标签: iphone iphone-sdk-3.0

我有这个代码 - (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item

我正在寻找的是一个代码片段,说明如何使用项目检测代理中按下的按钮。

所以也许我在标签栏上排列了1到4个按钮。我的用户按下按钮位置2.我需要知道,所以我可以调出适合该按钮的视图。

我试过这样的事情,但是没有用。

NSInteger *barIndex = [[barTab items] IndexofObject:item];

如果有人可以提供一些很棒的工作示例代码。

提前致谢。

3 个答案:

答案 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。