2015-04-03 78 views
2

我正在爲iOS創建一個Xamarin應用程序,並且我已經爲故事板添加了一個UITableViewCell以給它自己的樣式。我沒有爲這個自定義的UITableViewCell添加一個類,即MainMenuCell。我添加兩個標籤,以在細胞和與MainMenuCell.h文件連接它們,從而產生以下代碼:Xamarin自定義UITableViewCell拋出系統NullReferenceException

MainMenuCell.cs

using System; 
using Foundation; 
using UIKit; 

namespace MyProjectNamespace 
{ 
    public partial class MainMenuCell : UITableViewCell 
    { 
     public MainMenuCell (IntPtr handle) : base (handle) 
     { 
     } 

     public MainMenuCell() : base() 
     { 
     } 

     public void SetCellData() 
     { 
      projectNameLabel.Text = "Project name"; 
      projectDateLabel.Text = "Project date"; 
     } 
    } 
} 

MainMenuCell.h(自動生成的):

using Foundation; 
using System.CodeDom.Compiler; 

namespace MyProjectNamespace 
{ 
[Register ("MainMenuCell")] 
partial class MainMenuCell 
{ 
    [Outlet] 
    UIKit.UILabel projectDateLabel { get; set; } 

    [Outlet] 
    UIKit.UILabel projectNameLabel { get; set; } 

    void ReleaseDesignerOutlets() 
    { 
     if (projectNameLabel != null) { 
      projectNameLabel.Dispose(); 
      projectNameLabel = null; 
     } 

     if (projectDateLabel != null) { 
      projectDateLabel.Dispose(); 
      projectDateLabel = null; 
     } 
    } 
} 
} 

現在我有我的UITableViewSource這裏,我試圖從GetCell方法初始化MainMenuCell:

using System; 
using UIKit; 
using Foundation; 

namespace MyProjectNamespace 
{ 
public class MainMenuSource : UITableViewSource 
{ 
    public MainMenuSource() 
    { 

    } 

    public override nint NumberOfSections (UITableView tableView) 
    { 
     return 1; 
    } 

    public override string TitleForHeader (UITableView tableView, nint section) 
    { 
     return "Projects"; 
    } 

    public override nint RowsInSection (UITableView tableview, nint section) 
    { 
     return 1; 
    } 

    public override UITableViewCell GetCell (UITableView tableView, NSIndexPath indexPath) 
    { 
     MainMenuCell cell = new MainMenuCell(); 
     cell.SetCellData(); 
     return cell; 
    } 
} 
} 

然而,不斷拋出我System.NullReferenceException在該行:

projectNameLabel.Text = "Project name"; 

它說:對象引用不設置到對象的實例。

缺少什麼我在這裏?任何幫助將不勝感激。

回答

6

你快到了 - 不是自己創建一個新的單元,而是讓iOS完成工作並將結果出列。

public override UITableViewCell GetCell(UITableView tableView, NSIndexPath indexPath) 
{ 
    var cell = (MainMenuCell)tableView.DequeueReusableCell("MainMenuCell"); 
    cell.SetCellData(); 

    return cell; 
} 

注意,認爲「MainMenuCell」是從故事板的動態原型電池的標識,你可以命名爲任何你想要的,但它必須是相同的withing故事板和您的數據源。

enter image description here

相關問題