2012-01-13 2 views
0

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

Я создал общий SEGUE, не закрепленную ни к чему, но мнение и дал ему имя

Я привязано UIBarButtonItem в Interface Builder для:

- (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 должен быть представлен из элемента кнопки панели или вид. '

Он даже не ударил моего -(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

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

  1. iOS:How to dismiss Popover
  2. UIBarButtonItem + popover segue creates multiple popovers

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

+0

сделал и найти решение для этого? – iosMentalist

ответ

3

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

+0

Ну, я потратил много потоков, и ваш ответ определенно достоин кредита! :-) – Abdo

2

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

Если вы делаете это наоборот, Ctrl-Draging от кнопки к окну, чтобы быть показанным, у вас не будет возможности контролировать поведение из Popoverwindow.

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

Смежные вопросы