Comment naviguer vers ViewController dans Xamarin iOS sur l'événement RowSelected

J'ai un TableView sur mon écran d'accueil qui se trouve dans un controller de navigation. Maintenant, quand une ligne est sélectionnée, je veux montrer un MapView.

Je veux accéder au controller de navigation et y insert un MapViewController. Comment puis-je atteindre cet objective?

public override void RowSelected (UITableView tableView, NSIndexPath indexPath) { } 

Je suppose que votre méthode RowSelected est dans votre UITableViewController , n'est-ce pas? Dans ce cas, c'est facile, car vous pouvez accéder à la propriété NavigationController (définie dans UIViewcontroller ) qui est automatiquement définie sur le parent UINavigationController

 public override void RowSelected (UITableView tableView, NSIndexPath indexPath) { var index = indexPath.Row; NavigationController.PushViewController (new MyDetailViewController(index)); } 

Maintenant, vous devriez probablement utiliser UITableViewSource et replace RowSelected ici. Dans ce cas, assurez-vous que UINavigationController est disponible en effectuant une injection de constructor:

 tableViewController = new UITableViewController(); tableViewController.TableView.Source = new MyTableViewSource (this); class MyTableViewSource : UITableViewSource { UIViewController parentController; public MyTableViewSource (UIViewController parentController) { this.parentController = parentController; } public override int RowsInSection (UITableView tableview, int section) { //... } public override UITableViewCell GetCell (UITableView tableView, NSIndexPath indexPath) { //... } public override void RowSelected (UITableView tableView, NSIndexPath indexPath) { var index = indexPath.Row; parentController.NavigationController.PushViewController (new MyDetailViewController(index)); } } 

Remplacez MyDetailViewController dans cette réponse générique par votre MapViewController et vous devriez tous être définis.

Je voulais naviguer de IndexViewController à ViewController. J'utilise le code suivant.

 IndexViewController owner; public override void RowSelected (UITableView tableView, NSIndexPath indexPath) { UIStoryboard board = UIStoryboard.FromName ("Main", null); ViewController ctrl = (ViewController)board.InstantiateViewController ("viewControllerID"); owner.NavigationController.PushViewController (ctrl, true); }