Segue Popover не будет вести себя должным образом

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

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

Я привязал 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];
    }
}

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

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

Он даже не попал в мой -(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

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

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

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


person CStreel    schedule 13.01.2012    source источник
comment
вы нашли решение для этого?   -  person iosMentalist    schedule 06.12.2013


Ответы (2)


Я не беру на себя ответственность за это, так как я получил все это от прохождения нескольких потоков 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 элемент кнопки панели, который я подключил к действию.

person LavaSlider    schedule 15.02.2012
comment
Что ж, я просмотрел много тем, и ваш ответ определенно достоин уважения! :-) - person Abdo; 01.02.2013

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

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

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

person nob    schedule 06.07.2012