我已经在我的应用程序中实现了限制为100条消息的聊天,因为性能,突然我发现,行编辑并不像我预期的那么容易。 所以我尝试了这个:
public void RemoveTopRow()
{
messages.RemoveAt (0);
tableView.ReloadData ();
}
但它因本机异常而崩溃,我没有就此而去试试这个:
tableView.DeleteRows (new NSIndexPath[]{ NSIndexPath.FromItemSection(0,0) }, UITableViewRowAnimation.Fade);
也许有人知道该怎么做?小工作代码示例将非常有用,我保证,在我下次休假时,我会做一些重构并在github上发布这个聊天客户端,这样其他人就可以在没有UI痛苦的项目中实现它,因为我已经在这些布局修复上花费了太多时间和精力
答案 0 :(得分:1)
如果没有看到你调用RemoveTopRow
方法的位置,我只能猜测,但是从错误中,我假设你正在添加一个新的聊天行,并且在tableview / datasource完成同步之前删除FIFO堆栈中的第一个:
public void RemoveTopRow()
{
dataSource.Objects.RemoveAt (0);
TableView.ReloadData ();
}
void AddNewItem (object sender, EventArgs args)
{
dataSource.Objects.Add (DateTime.Now);
// This will cause the error that you are seeing when
// it reaches the TableView.InsertRows...
//if (dataSource.Objects.Count > 10) {
// RemoveTopRow ();
//}
using (var indexPath = NSIndexPath.FromRowSection (0, 0))
TableView.InsertRows (new [] { indexPath }, UITableViewRowAnimation.Automatic);
//This will work
if (dataSource.Objects.Count > 10) {
RemoveTopRow ();
}
}
答案 1 :(得分:0)
您需要在使用insert / delete之前调用BeginUpdates(),然后调用EndUpdates()。像图片一样。 enter image description here
希望它可以帮到你。 有关Xamarin.iOS欢迎的任何问题。