UIPopoverController размещение - PullRequest
       5

UIPopoverController размещение

0 голосов
/ 11 марта 2011

Я работаю над приложением, которое должно быть универсальным, одно приложение для iPad и iPhone. Я хотел бы сохранить их интерфейсы как можно более похожими. В приложении для iPhone я использую контроллер панели вкладок, и одна из этих вкладок идет к контроллеру выбора изображений. Очевидно, я не могу сделать это в iPad. Поэтому я похитил контроль над этой кнопкой, чтобы вывести всплывающий контроллер, в котором есть средство выбора изображений. Это все работает достаточно хорошо, за исключением того, что когда я поднимаю всплывающее окно, это не в правильном месте Когда я поворачиваю симулятор, всплывающее окно перемещается в правильное место и остается, даже когда я поворачиваю назад.

Мой код основан на коде в этом вопросе: Ошибка Ipad UIImagePickerController и UIPopoverController

Почему мое всплывающее окно не будет в правильном месте?

1 Ответ

3 голосов
/ 12 марта 2011

Если ваш код основан на вопросе, на который вы ссылались, может показаться, что вы используете следующий код для отображения всплывающего окна:

[popoverController presentPopoverFromBarButtonItem:sender
                          permittedArrowDirections:UIPopoverArrowDirectionUp 
                                          animated:YES]

UIPopoverController: presentPopoverFromBarButtonItem: allowArrowDirections: animated принимает UIBarButtonItem * дляотправитель, которого нет у вашего UITabBar.UITabBar использует UITabBarItem, который имеет базу UIBarItem.UIBarButtonItem также имеет эту базу (UIBarItem).

Во всяком случае ... Мне также нужно было показать контроллер uipopover с tabbaritem, я использовал следующий код:

MyViewController *myVC = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:[NSBundle mainBundle]];
UIPopoverController *popover = [[UIPopoverController alloc] initWithContentViewController:myVC];
[myVC release];
popover.popoverContentSize = myVC.view.frame.size;
popover.delegate = self;
int tabBarItemWidth = self.tabBar.frame.size.width / [self.tabBar.items count];
int x = tabBarItemWidth * 6;
CGRect rect = CGRectMake(x, 0, tabBarItemWidth, self.tabBar.frame.size.height);
[popover presentPopoverFromRect:rect
                         inView:self.tabBar 
       permittedArrowDirections:UIPopoverArrowDirectionUp 
                       animated:YES];

Примечание: ваш расчет хбудет другим.Для меня был выбран 6-й элемент панели вкладок.В основном

x = tabBarItemWidth * currentTabBarItemIndex;
...