2013-06-24 5 views
1

Следующая ситуация в Xamarin.IOS/MonoTouch применяется:Xamarin.iOS/MonoTouch Раскадровка Segue на UIViewController не найдено

  • Я использую два viewcontrollers, VCOne и VCTwo и я поручил им два пользовательских классов в XCode редактор раскадровки (MYVCOneClass и MyVCTwoClass).
  • Затем я перетаскиваю сегмент из VCOne (из диспетчера представлений в левом листинге) в экземпляр VCTwo viewcontroller в части редактора и выбираю «Push».
  • Я называю segue «OneToTwoSegue».

Мой вопрос

Когда я выполнить следующий вызов от нажатия кнопки EventHandler в классе VCOne:

this.performSegue("OneToTwoSegue", this); 

я получаю сообщение об ошибке выполнения сказать, что OneToTwoSegue не могут быть найдены на объект MyVCOneClass.

Кто-нибудь знает, почему я не могу назвать этот segue из кода вроде этого? Я знаю, что видел segues, работая, когда я связываю их с ячейками, кнопками и так далее.

ответ

5

Если вы выполняете «push» segue, ваш первый контроллер представлений должен быть контроллером корневого представления UINavigationController.

Итак, в своем раскадровке перетащите элемент управления UINavigationController, удалите табличное представление и ViewController, прикрепленные по умолчанию, а затем сделайте VCOne в корневом представлении (так же, как и вы сделаете управление захватом segue и перетащите его из UINavigationController в UIViewController, а затем щелкните контроллер корневого представления.

Ваш Segue должен работать нормально. Просто убедитесь, что UINavigationController установлен как первый экран (эта маленькая стрелка, указывающая налево, должна быть перемещена из VCOne в UINavigationController)

EDIT: Я загрузил скриншот примера раскадровки Я создал, чтобы продемонстрировать это вам. VCOne - это контроллер корневого контроллера навигационного контроллера. И есть переход от VCOne к VCTwo под названием OneToTwoSegue. При этом ваш код на кнопке будет работать отлично. Segue Storyboard

+0

Так что, если я хочу использовать толчок перетекает связать 5 экранов (с пользовательским ViewController классов) один за Афоризм мне нужно все инкапсулировать тех, кто в NavigationController, связать SEGUE к следующему navigationcontroller и что бы его ? – EeKay

+0

Вам понадобится только один контроллер навигации, чтобы связать все их. Таким образом, в редакторе раскадровки, поток будет идти следующим образом: UINavigationController --RootViewController -> VCOne --OneToTwoSegue -> VCTwo --TwoToThreeSegue -> VCThree и так далее. До тех пор, пока ваш первый контроллер представления в навигационном потоке (VCOne в вашем случае) является контроллером корневого представления UINavigationController, все остальные UIViewControllers, связанные с push-segues, после этого будут использовать этот UINavigationController. – Trogdor

+0

Я добавил скриншот и обновил исходный ответ для вас – Trogdor