Программная установка всплывающего окна с использованием идентификатора из раскадровки

У меня немного уникальная ситуация с поповерами. Я только что закончил добавлять третий элемент навигации (UIBarButtonItem), который мне пришлось создать программно, поскольку раскадровка допускает только два элемента навигации. Эта новая кнопка в настоящее время переходит к контроллеру представления, используя идентификатор, который я установил в раскадровке. Все работает как есть, но мне нужно перейти к поповеру вместо нажатия. Поскольку эта кнопка была создана в коде, я не могу установить якорь для всплывающего окна в раскадровке. Есть ли способ установить тип перехода в всплывающее окно в раскадровке и программно установить его привязку с помощью идентификатора? Или всплывающее окно должно быть сделано полностью в коде? Ниже показано, что у меня есть для новой кнопки и текущего перехода.

Button Initialized
self.categoryButtonItem = [[UIBarButtonItem alloc]initWithTitle:NSLocalizedString(@"Cat", @"categories button")   style:UIBarButtonItemStyleDone target:self action:@selector(categoryButtonDidPress:)];
self.navigationItem.rightBarButtonItems = [self.navigationItem.rightBarButtonItems arrayByAddingObject:self.categoryButtonItem];
Current Segue set to Push in storyboard.
-(void) categoryButtonDidPress:(UIBarButtonItem *)sender {
    [self performSegueWithIdentifier:@"categorySegue" sender:nil];
}

person Alex Blair    schedule 08.07.2015    source источник


Ответы (1)


В приведенном ниже коде показано, как вы можете включить всплывающее окно в свое приложение на основе ограничений, указанных выше. Эта функция несовместима с iPhone. Он может быть совместим с iPhone 6 Plus (учитывая возможность разделения экрана). В xcode6 идентификатор контроллера представления был удален и заменен идентификатором раскадровки (и, возможно, в более поздних версиях). Это важно при создании экземпляра контроллера представления с идентификатором и обязательно создайте свойство для UIPopOverController. Помните, что это всего лишь отправная точка для любых новых разработчиков.

property
@property (nonatomic, strong) UIPopOverController *buttonPopOverController;
method
-(void) categoryButtonDidPress:(UIBarButtonItem *)sender {
    UIStoryboard *storyboard = self.storyboard;
    CategoryViewController *categoryVC = [storyboard instantiateViewControllerWithIdentifier:@"CategoryViewController "];
    self.buttonPopOverController = [[UIPopoverController alloc] initWithContentViewController:categoryVC];
    [self.buttonPopOverController presentPopoverFromBarButtonItem:self.categoryButtonItem permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];

}
person Alex Blair    schedule 08.07.2015