Monotouch自定义UITableViewCell GetCell未初始化新的自定义视图单元格

Monotouch自定义UITableViewCell GetCell未初始化新的自定义视图单元格,uitableview,xamarin.ios,xamarin,Uitableview,Xamarin.ios,Xamarin,我已经阅读了大量教程,使用故事板将一个定制的表格视图单元组合成一个原型表格视图 我是monotouch的新手,并设法为标准电池类型找到了一个可行的解决方案。由于无法以正确的方式初始化新单元格,自定义视图单元格遇到问题。一些旧教程似乎加载了一个cell nib文件,但我使用的是带有以下代码的情节提要 我哪里做错了 (我会使用monotouch对话框,但我想不出一个简单的方法在附件上添加可爱的uipickerviews等) 在.xib文件中,对于该单元格,是否使用相同的单元格标识符“SingleT

我已经阅读了大量教程,使用故事板将一个定制的表格视图单元组合成一个原型表格视图

我是monotouch的新手,并设法为标准电池类型找到了一个可行的解决方案。由于无法以正确的方式初始化新单元格,自定义视图单元格遇到问题。一些旧教程似乎加载了一个cell nib文件,但我使用的是带有以下代码的情节提要

我哪里做错了

(我会使用monotouch对话框,但我想不出一个简单的方法在附件上添加可爱的uipickerviews等)


在.xib文件中,对于该单元格,是否使用相同的单元格标识符“SingleTimeViewCell”。我不确定您是如何创建自定义单元格的,但我知道我也遇到了类似的问题

你不能用故事板来做。对单元格使用主情节提要和单独的xib文件

只能使用带有原型单元的故事板,请参见

以下是相关代码(归功于Stephane Cordonnier):

公共部分类CustomCellStoryBoardViewController:UIViewController
{
公共CustomCellStoryBoardViewController(IntPtr句柄):基本(句柄)
{
}
公共覆盖无效DidReceiveMemoryWarning()
{
base.DidReceiveMemoryWarning();
}
公共覆盖无效ViewDidLoad()
{
base.ViewDidLoad();
this.MyTableView.DataSource=新的MyDataSource();
}
私有类MyDataSource:UITableViewDataSource
{
私有字符串[]项={“项1”、“项2”、“项3”、“项4”、“项5”};
公共MyDataSource()
{
}
公共覆盖int RowsInSection(UITableView表格视图,int section)
{
返回此.items.Length;
}
公共覆盖UITableViewCell GetCell(UITableView tableView,NSIndexPath indexPath)
{
MyCustomCell=(MyCustomCell)tableView.DequeueReusableCell(MyCustomCell.Key);
cell.SetTitle(this.items[indexPath.Row]);
返回单元;
}
}
}
自定义单元格:

[注册(“MyCustomCell”)]
公共类MyCustomCell:UITableViewCell
{
[出口]
MonoTouch.UIKit.UILabel标题标签{get;set;}
公共静态只读NSString键=新NSString(“MyCustomCell”);
公共MyCustomCell(IntPtr句柄):基本(句柄)
{
}
公共无效集合标题(字符串标题)
{
this.TitleLabel.Text=标题;
}
}

确保您已将自定义单元类和标识符设置为故事板中单元类的名称。

我读了很多关于tableview单元和重用以及Xib的毫无意义的文章, 几乎所有找到的jsute示例代码都不能正确重用

在iOS6上,进一步介绍最简单的方法:

  • 从Xamarin创建新的UITABLEVIEWCELL。(比如说MyCustomCell)
  • 在InterfaceBuilder中,将单元格的标识符设置为MyCustomCell.Key的值(在Xamarin Studio创建的MyCsutomCell.cs中找到该值)
  • 在ViewController中,按以下方式注册nib:
  • tableView.registernbforcellReuse(MyCsutomCell.Nib,MyCsutomCell.Key)

  • 然后,在数据源中的GetCell方法中,将一个单元格出列(如果不存在,它将创建一个):

  • MyCsutomCell cell=tableView.DequeueReusableCell(MyCsutomCell.Key)作为MyCsutomCell

    在故事板中,我可以直接添加视图单元格并编辑其内容、标签等。我已经看到教程在单独的xib文件中对其进行编辑。但是故事板和IOS 6不允许在故事板中进行如上所述的编辑吗?谢谢你的建议。我仍在学习,但我在这个阶段成功地使用父tableview控制器的构造函数中的以下条目加载了自定义单元格,以便加载包含单元格视图的xib文件以及单元格标识符:tableview.RegisternbforcellReuse(UINib.FromName(“SingleTimeViewCell”,NSBundle.MainBundle),“SingleTimeViewCell”);向我的动画自定义tablecell视图又迈出了一小步:)请原谅我的无知,我应该将哪个inspector属性设置为“确保已在故事板中设置自定义单元格类”?@HOCA在Xamarin Studio的小部件下,同时设置“标识->类”和“表视图单元格->标识符”“应设置为自定义单元格类的名称。
    public override UITableViewCell GetCell (UITableView tableView, MonoTouch.Foundation.NSIndexPath indexPath)
    {
        // in a Storyboard, Dequeue will ALWAYS return a cell
        //*** above comment doesnt seem to hold for custom uitableview cells
        UITableViewCell cell = tableView.DequeueReusableCell (cellIdentifier);
        // now set the properties as normal
        cell.TextLabel.Text = tableItems[indexPath.Row].Name;
        if (tableItems[indexPath.Row].Done) 
            cell.Accessory = UITableViewCellAccessory.Checkmark;
        else
            cell.Accessory = UITableViewCellAccessory.None;
        return cell;
    }
    
    
    // here's my implementation of GetCell but problem is that I can't seem to generate a new cell
    public override UITableViewCell GetCell (UITableView tableView, NSIndexPath indexPath)
    {
            _cellIdentifier = "SingleTimeViewCell";
            CustomViewCell cell = tableView.DequeueReusableCell (_cellIdentifier) as 
    
    //      if (cell == null)
    //      {
    //          cell = new SingleTimeViewCell();
    //      }
    
             cell.myCustomProperty = "hello";
             return cell;
    }
    
    // here's the auto generated CustomViewCell class from Xcode storyboard
    public partial class CustomViewCell : UITableViewCell
    {
        public CustomViewCell () : base()  // I added this ctor but it didnt seem to help matters
        {
        }
    
        public CustomViewCell (IntPtr handle) : base (handle)
        { 
        }
    
    }