Segue Popover не будет вести себя должным образом - PullRequest
0 голосов
/ 13 января 2012

Я пытаюсь использовать Segue, чтобы представить, а затем закрыть представление Popover, при нажатии на UIBarButtonItem.

Я создал общий Segue, который не привязан ни к чему, кроме представления, и дал емуимя

Я привязал UIBarButtonItem в Интерфейсном Разработчике к:

- (IBAction)clickedSettings:(id)sender {

    if(self.popSegue != nil) {
        [self.popSegue.popoverController dismissPopoverAnimated:YES];
    } else {
        //Current says only a button may
        [self performSegueWithIdentifier:@"Settings" sender:sender];
    }
}

Но когда я нажимаю кнопку, чтобы отобразить Segue, это выдает мне ошибку:

Завершение работы приложения из-за неисследованного исключения «NSInternalInconsistencyException», причина: «UIStoryboardPopoverSegue должен быть представлен из элемента кнопки панели или представления».

Я прочитал следующие вопросы по стеку:

  1. iOS: Как отклонить Popover
  2. UIBarButtonItem + popover segueсоздает несколько всплывающих окон

Но я все еще получаю ту же ошибку.За свою жизнь я не могу понять, что происходит не так

Ответы [ 2 ]

3 голосов
/ 15 февраля 2012

Я не беру на себя ответственность за это, так как я получил все это от прохождения нескольких потоков StackOverflow, но я получил это, работая с:

@interface MyViewController ()
- (IBAction) toggleSettingsInPopover: (id) sender;
@property (nonatomic, strong) UIStoryboardPopoverSegue *settingsPopoverSegue;
@end

@implementation MyViewController
@synthesize settingsPopoverSegue = _settingsPopoverSegue;

- (IBAction) toggleSettingsInPopover: (id) sender {
    if( [self.settingsPopoverSegue.popoverController isPopoverVisible] ) {
        [self.settingsPopoverSegue.popoverController dismissPopoverAnimated: YES];
        self.settingsPopoverSegue = nil;
    } else {
        [self performSegueWithIdentifier: @"Settings" sender: sender];
    }
}

- (void) prepareForSegue: (UIStoryboardSegue *) segue sender: (id) sender {
    if( [segue.identifier isEqualToString: @"Settings"] ) {
        if( [segue isKindOfClass: [UIStoryboardPopoverSegue class]] )
            self.settingsPopoverSegue = (UIStoryboardPopoverSegue *) segue;
        MySettingsViewController *msvc = segue.destinationViewController;
        msvc.delegate = self;
    }
}
@end

В моей раскадровке я перетаскивал управление из панели настроекНажмите на пункт MyViewController и подключите его к действию toggleSettingsInPopover.Затем я перетащил управление из MyViewController в представление настроек для создания перехода, установил его тип на popover, установил его идентификатор на Settings, установил его направления вверх и влево (панель инструментов находится внизуэкрана, и кнопка находится на правом конце), затем перетащите его с Anchor на элемент панели кнопок, который я подключил к действию.

2 голосов
/ 06 июля 2012

Вы должны привязать переход к UIBarButton, удерживая Ctrl и перетаскивая поле привязки из инспектора атрибутов segue в UIBarButton.

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

(Важная часть также в последнем предложении ответа LavaSlider)

...