以编程方式从Xamarin.iOS中的TableView Cell推送segue

时间:2014-09-18 13:38:08

标签: ios xamarin.ios xamarin tableview

我正在开发一个与Xamarin相当简单的应用程序,但我坚持一件事:我在UIViewController中创建了一个tableView。单元格渲染在外部类中完成:TableSource.cs。 UITableViewSource的子类。要处理行,请单击i确实覆盖选定的行:

public override void RowSelected (UITableView tableView, NSIndexPath indexPath)
    {
        new UIAlertView("Row Selected", tableItems[indexPath.Row], null, "OK", null).Show();
        tableView.DeselectRow (indexPath, true); // iOS convention is to remove the highlight
        //Push another ViewController on top:
        UINavigationController test = new UINavigationController ();
        test.PushViewController (new UIViewController (),true);

    }

到目前为止,像魅力一样。但是当我尝试在顶部推送另一个ViewController时,要显示有关该行的详细数据,没有任何反应,我不会收到任何错误或异常消息。 我也尝试使用Nav的自定义类。控制器和视图控制器,它不会改变任何东西。

2 个答案:

答案 0 :(得分:5)

你不能只是创建一个新的UINavigationController并像这样使用它。相反,您需要在创建TVC时将UITableViewController包装在UINavigationController中 - 然后在RowSelected中,您可以使用现有的NavigationController在堆栈上推送新的ViewController。

public override void RowSelected (UITableView tableView, NSIndexPath indexPath)
    {
        new UIAlertView("Row Selected", tableItems[indexPath.Row], null, "OK", null).Show();
        tableView.DeselectRow (indexPath, true); // iOS convention is to remove the highlight

        // parent is a reference to the UITableViewController - you will need to pass this into
        // your TableSource class.  Every ViewController has a NavigationController property - if
        // the VC is contained in a Nav controller this property will be set.
        parent.NavigationController.PushViewController(new UIViewController(), true);

    }

创建TableSource时,传入对TableViewController的引用,以便源的RowSelected方法可以访问NavigationController。

// in your TableViewController, when you assign the Source property
TableView.Source = new MyTableSource(this);

// in the MyTableSource class
TableViewController parent;

public MyTableSource(TableViewController parent) {
  this.parent = parent;
}

现在,在您的RowSelected方法中,您可以访问parent.NavigationController

答案 1 :(得分:-2)

UINavigationController test=new UINavigationController ();
this.NavigationController.PushViewController(test,true);