Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ios UITableView在删除和插入行时闪烁_Ios_Objective C_Flash_Uitableview - Fatal编程技术网

ios UITableView在删除和插入行时闪烁

ios UITableView在删除和插入行时闪烁,ios,objective-c,flash,uitableview,Ios,Objective C,Flash,Uitableview,我对UITableView有问题。 我有一个最多20个元素的ringbuffer。 我将此缓冲区作为源添加到tableview。 当我添加一个项目时,我调用 table.BeginUpdate(); tableMessges.InsertRows(new NSIndexPath[] { NSIndexPath.FromRowSection(buffer.Count-1, 0) }, UITableViewRowAnimation.None); buffer.Add(item); tableMes

我对UITableView有问题。 我有一个最多20个元素的ringbuffer。 我将此缓冲区作为源添加到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();

我建议您直接向UITableView控件插入和删除行,而应该操作与之绑定的数据源并重新加载表数据

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


从您手头的代码来看,您似乎有某些细节可以使用此方法。

您是否尝试过处理其数据源,而不是直接向UITableView添加内容?更新数据源并调用reloadData。那就不应该了。没错,但是“重新加载数据”是一种很重的方法,它会重新加载每个单元格