我的主屏幕上有一个 TableView,它位于导航 Controller 内。现在,选择一行时,我想显示MapView。

我想访问导航 Controller 并将 MapViewController 插入其中。我怎样才能做到这一点?

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

}

最佳答案

我假设您的 RowSelected 方法在您的 UITableViewController 中,对吗?在这种情况下,这很容易,因为您可以访问自动设置为父 NavigationControllerUIViewcontroller 属性(在 UINavigationController 中定义)

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

现在,您可能应该使用 UITableViewSource ,并在那里覆盖 RowSelected 。在这种情况下,通过构造函数注入(inject)确保 UINavigationController 可用:

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

用您的 MyDetailViewController 替换此通用答案中的 MapViewController ,您应该已准备就绪。

关于ios - 如何在 RowSelected 事件上导航到 Xamarin iOS 中的 ViewController,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19443303/

10-09 01:39