2013-02-09 40 views
0

我使用mono開發3.1.1來構建IOS應用程序。我從我沒有正確聲明的導航控制器引用中收到對象引用錯誤(請參閱>>>)。Monotouch中的UITableView導航

我的問題是聲明和實例化控制器的最佳方式是什麼,以便能夠從選定表格單元格的位置顯示另一個視圖。

有人可以幫助我正確的語法嗎?

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

回答

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等)。

+0

嗨皮爾斯,感謝您的信息。我從xamarin文檔站點獲得了上述示例。我正在努力的部分是當我打電話來初始化班級時,我如何讓控制器通過?像table.Source = new TableHelper(tableItems,<引用到控制器here>);任何幫助是極大的讚賞。 – user686483 2013-02-09 22:54:06

+0

table.Source = new TableHelper(tableItems,this.NavigationController);請注意,一種方法是在您的AppDelegate(或創建此類的任何位置)中使用類似的方法創建主UIViewController類:var TableViewController = new UINavigationController(new NameOfMasterViewController());這將確保調用類有一個UINavigationController。 – pierceboggan 2013-02-09 23:38:29

+0

嗨皮爾斯,對於遲到的回覆感到抱歉。我設法解決這個問題。我做了你的建議,並創建了一個主或rootview控制器。我還添加了一個單獨的數據源和委託。我現在可以將我的導航控制器傳遞到任何位置並調用新的視圖。謝謝你的幫助。 – user686483 2013-02-23 01:18:50