Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to navigate to ViewController in Xamarin iOS on RowSelected event

I am having a TableView on my home screen which is inside a Navigation Controller. Now, when a row is selected, I want to show a MapView.

I want to get access to the Navigation Controller and push a MapViewController into it. How can i achieve this?

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

}
like image 782
ilight Avatar asked Nov 18 '25 06:11

ilight


1 Answers

I assume your RowSelected method is in your UITableViewController, right? In this case, it's easy, as you can access the NavigationController property (defined in UIViewcontroller) which is automatically set to the parent UINavigationController

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

Now, you probably should use a UITableViewSource, and override RowSelected there. In that case, make sure the UINavigationController is available by doing constructor injection:

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

Replace MyDetailViewController in this generic answer by your MapViewController and you should be all set.

like image 69
Stephane Delcroix Avatar answered Nov 20 '25 19:11

Stephane Delcroix