删除和插入行时ios UITableView闪存

时间:2014-10-21 10:03:41

标签: ios objective-c flash uitableview

我有UITableView的问题。 我有一个最多20个元素的环形缓冲区。 我将此缓冲区添加为tableview的源。 当我添加一个项目我打电话

table.BeginUpdate();
tableMessges.InsertRows(new NSIndexPath[] { NSIndexPath.FromRowSection(buffer.Count-1, 0) }, UITableViewRowAnimation.None);
buffer.Add(item);
tableMessges.EndUpdates();

这项工作很好。 现在当缓冲区已满时,我删除第一个表行(也是缓冲区中的第一个对象),插入一个新行并添加一个新对象到缓冲区。 当我做这个程序慢(每秒)它看起来很好。 我只想在表格中最多包含20个项目。 但是,当我调用此过程时,可以说100毫秒,表视图闪烁很多。 有没有机会减少闪烁。

当缓冲区已满时,这是我的代码。

table.BeginUpdates();
buffer.AddMessage(canMessage);
if(buffer.count >= buffer.capacity)
{
     table.InsertRows(new NSIndexPath[] { NSIndexPath.FromRowSection(buffer.count-1, 0) }, UITableViewRowAnimation.None);
     table.DeleteRows(new NSIndexPath[] { NSIndexPath.FromRowSection(0, 0) }, UITableViewRowAnimation.None);
  }
  else
  {
       table.InsertRows(new NSIndexPath[] { NSIndexPath.FromRowSection(buffer.NumberOfRows-1, 0) }, UITableViewRowAnimation.None);
  }
  table.EndUpdates();

1 个答案:

答案 0 :(得分:0)

我建议改为直接插入和删除行 UITableView控件,你应该操纵DataSource绑定到它并重新加载表数据。

对于优化和特定数据重新加载,您可以查看UITableView {{1}}控件。例如:

Apple Doc (Reloading the TableView)

从您的手中代码中可以看出,您可以使用此方法获得某些细节。