Cómo navegar a ViewController en Xamarin iOS en RowSelected evento

Estoy teniendo un formato tableview en mi pantalla de inicio que está dentro de un Controlador de Navegación. Ahora, cuando se selecciona una fila, quiero mostrar un MapView.

Quiero tener acceso al Controlador de Navegación y pulsar un MapViewController en ella. ¿Cómo puedo lograr esto?

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

}
InformationsquelleAutor ilight | 2013-10-18

2 Kommentare

  1. 9

    Puedo asumir que sus RowSelected método está en su UITableViewController, ¿verdad? En este caso, es fácil, como usted puede tener acceso a la NavigationController de la propiedad (que se define en UIViewcontroller) que se ajusta automáticamente a los padres UINavigationController

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

    Ahora, usted probablemente debería usar un UITableViewSource, y reemplazar RowSelected allí. En ese caso, asegúrese de que el UINavigationController está disponible haciendo inyección 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));
        }
    }

    Reemplazar MyDetailViewController en esta genérica respuesta por su MapViewController y usted debe estar todo listo.

    • Impresionante, yo no podría obtener acceso directo a NavigationController como en el primer fragmento de código, pero el 2º snipper funcionaba de maravilla 🙂
    • Así que usted no estuviera en un UIViewController incrustado en un UINavigationController.
    • He separado MyTableViewControllerSource clase subclase de UITableViewSource que contiene el RowSelected método. Así que, he utilizado el constructor como se mencionó en el 2º fragmento y trabajó para mí. Empecé usando Xamarin un par de días atrás, de modo que me estoy perdiendo cualquier concepto básico aquí?
  2. 1

    Quería navegar desde IndexViewController A ViewController. Yo uso el siguiente código.

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

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein