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); }