为什么我不能重用任何UITableView单元?

时间:2011-09-15 16:02:38

标签: iphone ios uitableview xamarin.ios

我有UITableView显示超过50个自定义设计的单元格。该表显示确定,但如果我滚动表,则不会重复使用单元格。相反,我的应用程序只是不断加载新的单元格,这在我的iPhone 3上非常慢。

可能导致此问题的原因是什么?这是从UITableViewSource.GetCell()方法

剪切的代码
var dequeuedCell=tableView.DequeueReusableCell (identifier);

    //try to reuse a previously recycled cell, create a new one if none exists
    var cell = (ITimeEntryTableCell)dequeuedCell;
    if (cell == null)
    {
        //load a new cell using the XIB file definition
        NSBundle.MainBundle.LoadNib (identifier, tableViewController, null);
        cell = tableViewController.DurationCell;
        tableViewController.DurationCell = null;

    }

谢谢,

阿德里安

编辑:请注意我使用的是Monotouch,而不是客观的C ...

4 个答案:

答案 0 :(得分:3)

您是否在xib文件中设置了单元格标识符?如果未设置,则您的单元格不会出列。

答案 1 :(得分:0)

这是完美运作的代码 -

- (UITableViewCell *)tableView:(UITableView *)tableView 
         cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *cellID = @"Cell";
    UITableViewCell *cell   = [tableView dequeueReusableCellWithIdentifier:cellID];
    if(cell == nil)
    {
        [[NSBundle mainBundle] loadNibNamed:@"cell1" owner:self options:nil];
        cell = self.oneMessage;
        self.oneMessage = nil;
    }
    return cell;
}
单拍的

更新:,试试这个 -

public override UITableViewCell GetCell(UITableView tableView, MonoTouch.Foundation.NSIndexPath indexPath)
{
    UITableViewCell cell = tableView.DequeueReusableCell(this._cellIdentifier);

    myTableViewCell mycell = null;
    if (cell == null)
    {
        mycell = new myTableViewCell();
        NSBundle.MainBundle.LoadNib("RootViewController", _controller, null);
        _controller.myTableCell = new myTableViewCell();
        mycell = _controller.myTableCell;
        cell = new UITableViewCell(UITableViewCellStyle.Subtitle, this._cellIdentifier);
    }
    else
    {
      mycell = (myTableViewCell)cell;
    }

答案 2 :(得分:0)

在界面中,声明:TableViewCell * aCell,并尝试使用此方法:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath; {
  static NSString * CellIdentifier = @"TableViewCell";
  TableViewCell * cell = (TableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
  if (cell == nil) {
    [[NSBundle mainBundle] loadNibNamed:CellIdentifier owner:self options:nil]; // hooks up cell for us.
    cell = aCell;
  }
  return cell;
}

希望有帮助!

答案 3 :(得分:0)

确保“标识符”是NSString,因为它可以在内部用作标记,而不是字符串内容比较。

所以:

NSString identifier = new NSString(“myID”);