2016-07-08 5 views
0

У меня возникли проблемы с переходом с UITableViewController на UIViewController.Xamarin iOS PrepareForSegue не называется

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

К сожалению, навигация не работает, и я понятия не имею, почему. Я использую раскадровку, содержащую UINavigationController -> UITableViewController -> UIViewController.

Я установил segue из моего UITableViewController на страницу подробностей (UIViewController), нажав клавишу управления в Visual Studio 2015 Designer и вычерчивая строку из TableCell для моего UIViewController. Я вижу, что ячейка таблицы получает жирную синюю границу.

После этого устанавливается идентификатор segue на «PartDetailSegue». В моем UITableViewController я перезаписал функцию PrepareForSegue.

Когда я добавляю точку останова к функции PrepareForSegue и запускаю приложение, функция не вызывается при нажатии на ячейку таблицы. Есть что-то, чего я не вижу?

Xamarin Designer Views

кодекса в моей UITableViewContoller

public override void PrepareForSegue(UIStoryboardSegue segue, NSObject sender) 
     { 
      if (segue.Identifier == "PartDetailSegue") 
      { 
       var navctlr = segue.DestinationViewController as PartDetailViewcontroller; 
       if (navctlr != null) 
       { 
        var rowPath = TableView.IndexPathForSelectedRow; 
        var item = ((PartsTableViewDataSource)TableView.Source).GetItem(rowPath.Row); 
        navctlr.SetPart(this, item); 
       } 
      } 
     }   

Я использую Visual Studio 2015 Update 3. Последние обновления для Xamarin установлены.

+0

Происходит ли процесс segue (происходит ли UIViewController)? В противном случае я попытался бы запустить его вручную, переопределив «RowSelected» и вызывая «this.PerformSegue» («PartDetailSegue», это); », чтобы запустить segue и посмотреть, работает ли segue правильно. ('this' будет экземпляром' UITableViewController'). Я предполагаю, что что-то неправильно настроено в раскадровке. – dylansturg

+0

Спасибо, что ответили! Секуляция происходит, когда я вызываю ее через this.PerformSegue («PartDetailSegue», это); Я уже обокрался. Таким образом, кажется, что установка настроена правильно. На моем хранилище UITableViewController связан с моим собственным классом, который наследует форму UITableViewController и переопределяет функцию PrepareForSeque. Идентификатор сегмента также установлен. –

+0

Я просто попробовал это с помощью Xamarin Studio с раскадрой, и все это работало, как ожидалось. Так что ** ** должен работать в VS. Вы уверены, что выбрали опцию «Селекция выбора» «Показать»? Вы можете попробовать создать сеанс с Xamarin Studio и посмотреть, есть ли ошибка в VS. – dylansturg

ответ

1

Если вы используете UITableViewSource и создаете ячейки в функции GetCell через DequeueReusableCell («SomeName»), убедитесь, что в раскадровке ячейка представления таблицы прототипа установила одинаковый идентификатор. Otherwiese DequeueReusableCell не вернет шаблон вашей ячейки прототипа, который знает о segue.