2013-04-18 3 views
0

У меня есть segue, который перемещается из FirstViewController в SecondViewController. Это происходит нажатием кнопки. Код для кнопкиУвольнение из другого вида

- (IBAction)segue:(id)sender { 
[self performSegueWithIdentifier:@"myIdentifier" sender:self]; 
} 

Это происходит правильно, когда я нажимаю кнопку.

То, что я пытаюсь сделать, это запустить этот метод с другого вида. Я пытался делать

FirstViewController fvc = [[FirstViewController alloc] init]; 
[fvc segue:nil]; 

Когда я пытаюсь это, я получаю сообщение об ошибке, Ресивер не имеет SEGUE с идентификатором «myIdentifier»

Как я огнь этого SEGUE из другого программно зрения?

ответ

2

Есть несколько вопросов здесь, но они сводятся к нескольким основным пунктам:

  • перетекает являются раскадровка вещь, поэтому просматривать контроллеры только «знать» о перетекает, если они инстанцирован от раскадровки.
  • Контроллер вида должен быть на экране, чтобы выполнить сеанс.
  • Segues - это переходы с одного конкретного контроллера вида на другой определенный контроллер представления.

Итак, в вашем фрагменте кода:

FirstViewController fvc = [[FirstViewController alloc] init]; 
[fvc segue:nil]; 

Первая проблема заключается в том, что alloc - init -ную дает экземпляр FirstViewController, что ничего не знает о раскадровке она пришла не знаю, так что ничего не знает о segues. (Это само по себе можно было исправить с помощью [instantiateViewControllerWithIdentifier:] [1], но это не решает всей вашей проблемы.) Вторая проблема заключается в том, что этот экземпляр не подходит нигде в иерархии пользовательского интерфейса - он не был представлен как modal view controller, это не контроллер верхнего уровня в текущем контроллере навигации, это не контроллер корневого представления видимого окна и т. д. Чтобы перевести экран из одного вида в другое, первое представление должно быть на экране.

Похоже, что вы хотите сделать переход от того, что в настоящее время находится на экране, к цели этого сеанса. Но понятие раскадровки segue - это не просто переход с пунктом назначения - это источник, место назначения и переход или отношения между ними. Если у вас другое представление источника, вам нужен другой сеанс. Итак, если у вас уже есть segue от FirstViewController до SecondViewController, и вы хотите сделать аналогичный переход от OtherViewController (при условии, что это сейчас на экране) до SecondViewController, вам нужно сделать второй сеанс, соединяя OtherViewController с SecondViewController.

+0

Хорошее объяснение. @rickster, там есть способ выстрелить в сеге без нажатия кнопки? – m177312

+0

Вы можете поместить '[someVC performSegueWithIdentifier: @" myIdentifier "sender: whatever]' почти где угодно - все, что требуется, - это 'someVC' - текущий видимый контроллер представления (и что он был создан через раскадровку). – rickster

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