2010-08-18 3 views
0

Сценарий: У меня есть UITabBar в верхней части моего контроллера. На вкладке есть несколько кнопок. Когда пользователь нажимает на любую из кнопок, я хочу отобразить popover прямо под нажатой кнопкой.Поместите поп в определенном месте

Я могу отобразить всплывающее окно без проблем, но я не могу понять, как определить местоположение кнопки, которая была нажата, поскольку UITabItem не раскрывает структуру кадра.

Как я могу решить свою проблему?

ответ

0

Вы можете вычислить кадр UITabBarItem самостоятельно:

CGFloat tabItemWidth = tabBar.bounds.size.width/[tabBar.items count]; 
CGRect tabItemFrame = CGRectMake(tabItemWidth * [tabBar.items indexOfObject:tabBar.selectedItem], 0, tabItemWidth, tabBar.bounds.size.height); 

(я не пробовал этот код, но это или нечто подобное должно работать).

Или вы должны иметь возможность подкласса UITabBar и переопределять atthesEnded: withEvent :. В этом методе сохраните местоположение касания в иваре. Затем в tabBar UITabBarDelegate: didSelectItem: вы можете использовать местоположение касания.

+0

обновление по результатам: Если элементы панели табуляции имеют изображения, вы можете использовать свойство selectedItem UITabBar для получения выбранного UITabBarItem, а затем получить кадр изображения элемента панели табуляции. Используйте рамку изображения при вызове presentPopoverFromRect: inView: allowedArrowDirections: анимированный: – amok

+0

предоставленный код не скомпилирует (2-я строка) - недопустимые операнды в двоичном формате – amok

+0

Правильно, я не понял, что выбрано .Item не был индексом. Я обновил его с чем-то, что должно работать, но вам может понадобиться работать с ним. Похоже, у вас уже есть решение. –