создание кнопки для привязки всплывающего окна во время выполнения

Это может быть невозможно, но я надеюсь, что у кого-то будет идея, как это сделать.

У меня есть приложение, которое я переношу с iPhone только на Universal. На iPhone я использую приложение с вкладками. Я использую три вкладки для отображения обычных данных. У меня есть четвертая вкладка, которая отображается только при соблюдении определенных условий. Чтобы добавить вкладку, я делаю:

if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) 
{
    UITabBarController *tabController = (UITabBarController *) self.rootViewController;
    NSMutableArray* newArray = [NSMutableArray arrayWithArray: tabController.viewControllers];
    [newArray addObject: [theStoryboard instantiateViewControllerWithIdentifier: @"AdditionalView-Phone"]];
    [tabController setViewControllers:newArray animated:YES];
}

Для iPad у меня достаточно места на начальном экране, чтобы отобразить все из трех основных вкладок в пользовательском интерфейсе iPhone. Так что все, что мне нужно, это одно дополнительное (маленькое) представление для «дополнительных» данных. Я хотел сделать это с помощью представления popOver, поэтому я установил начальное представление с панелью навигации и кнопкой всплывающего окна, как в шаблоне служебного приложения. Но теперь я застрял. Я не могу понять, как создать эту кнопку всплывающего окна во время выполнения и заставить ее правильно переходить к представлению popOver. Я могу добавить такую ​​кнопку:

UIBarButtonItem *flipButton = [[UIBarButtonItem alloc] initWithTitle: @"Modem" style: UIBarButtonItemStylePlain target: self action: @selector(togglePopover:)];
self.navBar.topItem.rightBarButtonItem = flipButton;

, но получаю исключение: «NSInternalInconsistencyException», причина: «UIStoryboardPopoverSegue должен быть представлен из элемента кнопки панели или представления». Я почти уверен, что это потому, что у меня нет привязки для перехода popOver. Кнопки нет в раскадровке, поэтому я не могу ее там установить. И я не могу найти API, чтобы установить его во время выполнения.

Я также попытался создать кнопку в IB, но не в иерархии представлений, а затем просто установил свойство rightBarButtonItem для моей существующей кнопки.Это тоже работает, но я все еще не могу установить эту кнопку в качестве привязки для всплывающего окна. Я могу установить панель навигации в качестве привязки, но это делает ее привязкой к заголовку на панели навигации, что выглядит глупо.

Есть идеи?

20
задан Flyingdiver 16 October 2011 в 21:05
поделиться