Сбои перехода Popover при вызове программно - PullRequest
3 голосов
/ 26 марта 2012

Я использую раскадровки XCode 4.2.Первоначально у меня был Popover Segue, привязанный к UIButton на UIViewController, встроенный в навигационный контроллер, и все было хорошо.

Теперь мне нужно добавить условное поведение перед выполнением перехода, поэтому я сделал следующее:

  • Удален переход
  • Создан новый переход из UIViewController
  • Создал IBAction из кнопки
  • Вызывается [self performSegueWithIdentifier:@"mySegue" sender:self] в IBAction

Приложение проходит через prepareForSegue, но затем выдает SIGABRT и регистрирует следующее

 \*** Assertion failure in -[UIStoryboardPopoverSegue perform], /SourceCache/UIKit_Sim/UIKit-1912.3/UIStoryboardPopoverSegue.m:27

Есть идеи?У меня есть другие примеры этого нормально работает с push-segues.Это случай ненадлежащего поведения попов, о котором я постоянно слышу упоминание?

1 Ответ

10 голосов
/ 05 сентября 2012

Может быть, немного поздно:

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

Так что, если вы хотите программно вызвать sever, вы должны сделать это в два шага:

1.Подключите Segue к ViewController Вы просто перетаскиваете из своего ViewController, который должен выполнить переход, к целевому ViewController и выбираете Popover.

Connect Segue to ViewController

2.Определите идентификатор Это необходимо для вызова программы выполнения из вашего кода

3.Подключите якорь Вы перетаскиваете якорь к объекту, с которого вы хотите, чтобы началось всплывающее окно.На изображении ниже это BarButtonItem.Примечание: это автоматически не выполняет переход!(Таким образом, вы можете дополнительно выполнить некоторые действия, подключенные к BarButtonItem)

Connect the Anchor

4.Позвоните в segue из вашего кода

    [self performSegueWithIdentifier:@"yourIdentifier" sender:sender];
...