0

私はモノ開発 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;
    }
}
4

1 に答える 1

0

私が通常これを行う方法は、その特定のビューのセットのメインUIViewController(UITableViewを保持するビューコントローラー)への参照を保持し、NavigationControllerプロパティを介してその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のドキュメントサイトにはドキュメントがあり、Githubにはこれについてさらに詳しく説明しているコードがいくつかあります。もう1つの重要な注意点は、ビューコントローラのタイプ(通常のUIViewController、UITableViewControllerなど)です。

于 2013-02-09T07:11:57.850 に答える