iPhone SDK: Как получить выбранный табитем на вкладке? - PullRequest
1 голос
/ 02 февраля 2010

У меня есть этот код - (void) tabBar: (UITabBar *) tabBar didSelectItem: (UITabBarItem *) item

То, что я ищу, - это фрагмент кода, который иллюстрирует, как определить, какая кнопка была нажата внутри делегата, предположительно с использованием элемента.

Так что, возможно, у меня есть кнопки 1 - 4, выстроенные в ряд на панели вкладок. Мой пользователь нажимает кнопку 2. Мне нужно это знать, чтобы я мог вызвать вид, соответствующий этой кнопке.

Я пробовал что-то подобное, но это не работает.

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

Если бы кто-то мог предоставить какой-нибудь рабочий пример кода, это было бы здорово.

Заранее спасибо.

Ответы [ 3 ]

5 голосов
/ 02 февраля 2010

когда вы создаете свои UITabBarItem s, вы захотите присвоить им каждый конкретный тег. Когда вызывается ваш метод - (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
}
3 голосов
/ 17 июля 2011

Я понимаю, что этот вопрос довольно старый, но, возможно, это поможет кому-то в будущем:

UITabBarController имеет свойство с именем selectedIndex . Например, если UITabBarController объявлен как myTabBar , Вы всегда можете получить текущий выбранный индекс вкладки, позвонив

[myTabBar selectedIndex]

будет равно 0 для первой вкладки, 1 для второй и т. Д. ...

1 голос
/ 29 марта 2012

Я знаю, что этому посту уже исполнилось несколько лет, но вы использовали правильную строку вместо

NSInteger *barItem = [[tabBar items] indexOfObject:item];

вам нужно использовать

int barItem = [[tabBar items] indexOfObject:item];

Это потому что

indexOfObject:item 

вернет int, а не NSInteger.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...