单触式UITableView导航

时间:2013-02-09 05:37:23

标签: xamarin.ios monodevelop

我正在使用mono develop 3.1.1来构建IOS应用程序。我从我对未正确声明的导航控制器的引用中收到对象引用错误(请参阅>>>)。

我的问题是声明和实例化控制器的最佳方法是什么,所以我能够从选择表格单元格的角度显示另一个视图。

有人可以用正确的语法帮助我吗?

public class TableHelper : UITableViewSource {
    protected string[] tableItems;
    protected string cellIdentifier = "TableCell";


    public TableHelper (string[] items)
    {
        tableItems = items;
    }




    public override int RowsInSection (UITableView tableview, int section)
    {
        return tableItems.Length;
    }


    public override void RowSelected (UITableView tableView, NSIndexPath indexPath)
    {
        switch (tableItems[indexPath.Row])
        {
        case "one": 
            var DetailViewController = new SupportContactsDetailsScreen ();
            UINavigationController controller = new UINavigationController();
            // Pass the selected object to the new view controller.
            >>>controller.NavigationController.PushViewController(DetailViewController, true);
            break;
        default:
            //Console.WriteLine("Default case");
            break;
        }
    }


    public override UITableViewCell GetCell (UITableView tableView, MonoTouch.Foundation.NSIndexPath indexPath)
    {

        UITableViewCell cell = tableView.DequeueReusableCell (cellIdentifier);

        if (cell == null)
            cell = new UITableViewCell (UITableViewCellStyle.Default, cellIdentifier);

        cell.TextLabel.Text = tableItems[indexPath.Row];

        return cell;
    }
}

1 个答案:

答案 0 :(得分:0)

我通常采用的方法是保留对该特定视图集的主UIViewController(包含UITableView的视图控制器)的引用,并通过NavigationController属性访问该导航控制器。 (Xamarin在下面链接的代码示例中采用的另一种技术是直接传递UINavigationController。)

所以我会通过添加:

来改变你的课程
UIViewController parentViewController;
public TableHelper(string[] items, UIViewController vc)
{
    tableItems = items;
    parentViewController vc;
}

public override void RowSelected (UITableView tableView, NSIndexPath indexPath)
{
    switch (tableItems[indexPath.Row])
    {
    case "one": 
        var DetailViewController = new SupportContactsDetailsScreen ();
        UINavigationController controller = new UINavigationController();
        // Pass the selected object to the new view controller.
        parentViewController.NavigationController.PushViewController(DetailViewController, true);
        break;
    default:
        //Console.WriteLine("Default case");
        break;
    }
}

Xamarin在他们的文档网站上有一个document,在some code上有Github进一步讨论这个问题。另一个重要的注意事项是视图控制器的类型(常规UIViewController,UITableViewController等)。