无法使标识符为cell_id的单元出队-必须为该标识符注册一个nib或一个类

时间:2018-11-26 20:26:25

标签: c# .net xamarin xamarin.ios

我编写xamarin.ios应用程序并使用TableView。

我想创建一个自定义单元格。

所以在设计器中,我使用此属性创建了它

enter image description here

然后我尝试在TableSource中使用它

 public class ExperienceSource : UITableViewSource
{
    Experience[] TableItems;
    //NSString cellIdentifier = new NSString("TableCell");
    ExperienceController owner;
    public ExperienceSource(Experience[] items, ExperienceController owner)
    {
        TableItems = items;
        this.owner = owner;
    }

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

    public override nint RowsInSection(UITableView tableview, nint section)
    {
        return TableItems.Length;
    }




    public override UITableViewCell GetCell(UITableView tableView, NSIndexPath indexPath)
    {
        var cell = tableView.DequeueReusableCell("cell_id", indexPath) as ExperienceCell;
        //Experience item = TableItems[indexPath.Row];
        /*if (cell == null)
        {
            cell = new ExperienceCell(cellIdentifier);
        }*/
        cell.UpdateCell(TableItems[indexPath.Row].title, TableItems[indexPath.Row].price);
        //---- if there are no cells to reuse, create a new one
        /*if (cell == null)
        { 
            cell = new ()(CellIdentifier); 
        }*/
        return cell;
    }
}

这是ExperienceCell的类

 public partial class ExperienceCell : UITableViewCell
{
    public ExperienceCell (IntPtr handle) : base (handle)
    {
    }
    internal void UpdateCell(string title, string price)
    {
        ExperienceTitle.Text = title;
        ExperincePrice.Text = price;
    }
}

运行应用程序时,出现此错误

  

无法使标识符为cell_id的单元出队-必须注册一个笔尖   或标识符的类,或将原型单元连接到   故事板

我该如何解决?

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您缺少UITableView中的UITableViewCell注册。

请在您的ViewController中添加类似的内容(重要的部分是RegisterNibForCellReuse句子):

public override void ViewDidLoad()
{
    base.ViewDidLoad();

    MyTableView.RegisterNibForCellReuse(UINib.FromName(nameof(ExperienceCell), NSBundle.MainBundle), "cell_id");

    MyTableView.Source = new ExperienceSource(..., ...);    

    // .. your code
}

当您在UITableView外部声明UITableViewCells时,这是必要的步骤。